Android-请问如何用HTTP协议让Android客户端与服务器保持长连接

小组事务管理 小组事务管理 主题:974 回复:1955

Android-请问如何用HTTP协议让Android客户端与服务器保持长连接

浮生未歇 发布于 2017-04-09 字数 222 浏览 1211 回复 5

想做一个android即时通信的客户端,但不想用Socket和服务器相连,想使用Http协议,但不知道如何用Http请求和服务器保持长连接(因为Http是短连接),如果每隔一段时间循环访问服务器又会浪费带宽和流量,所以请教大家有什么好方法!

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(5

偏爱自由 2017-09-09 5 楼

轮询肯定是有必不可少的,设计一个好点的算法来减少轮询,同时减少每次轮询的数据,可以一定程度上避免浪费带宽和流量。
减少数据基本上就是尽量发送较少的数据和压缩数据这两种方式。
轮询的话,可以采用递增轮询时间的方式,例如从2s开始,连接成功后,下次的时间变成4s,这样一直下去,直到64s。如果中间有失败,就重新回到2s轮询(因为连接可能丢失,需要多尝试几次进行确认)。

瑾兮 2017-07-25 4 楼

可以参考Comet的设计,基于 HTTP 长连接的“服务器推”技术
目前很多SNS都是采用这个技术来实现客户端的消息推送

泛泛之交 2017-06-26 3 楼

我们的操作时这样的,当执行完登录操作后,将SESSION生成一个标识号,存在一个共享内置对象中的一个MAP中,可以理解 MAP<String_key , SESSION_value > 然后登录成功后将 key 返回给客户端,客户端每次请求中都会带有这个KEY ,根据这个KEY 可以获取到SESSION,当需要操作SESSION也可以直接操作,并且在客户端得到相应。

想挽留 2017-06-05 2 楼

这是长短轮询的问题。

一定要是使用长轮询,可以试试如下方式:

1、Http请求到服务器, 在要等待的位置,将请求阻塞(java, 可以在while循环不停的读取消息,且读取消息可以试着用LinkedBlockingQueue阻塞队列来获取消息,设置其阻塞等待)。

2、获取到消息之后,可以直接将结果返回。

3、客户端接收到返回之后,立即继续请求。

归属感 2017-05-18 1 楼

估计没有啥好办法吧。 上面两位说的已经很好了。

我觉得还是要在固定时间内减少传输的内容吧。

基本上都是先发送一个取得相关功能点是否变化的报文。

然后有变化的在发送报文来请求那一块的。 可以不必要的流量。