长连接

原创 2015年07月08日 18:34:13

提起长连接,大家就会想到ajax轮询以及http long polling(长轮询),但这两种都是人为模拟的假像:

ajax 轮询:

ajax轮询的原理非常简单,就是让浏览器每隔一段时间就发送一次请求,询问服务器是否有新信息。

浏览器:有新消息没(request)。

服务器:null(response)。

浏览器:有新消息没(request)

服务器:木有(response)

......


http long polling:

也是轮询,不过采取的是阻塞模型,如果服务器没有新消息那么就不会返回,直到有新消息才会结束这次握手,然后客户端再次发起下次。

客户端:有新消息没(request)

1秒

2秒

...

100 秒

服务器:你妹是我妹(response)

客户端:有新消息没(request)

......


从上面的简介可知,这两种都是假长连接,而且,ajax轮询需要服务器快速响应,而长轮询需要有较高的并发,都对服务器的资源有很大的耗费。



HTML5引进了一种新的协议WebSocket,它跟http协议一样,都是基于 TCP 协议的,他们两者之间的唯一关联就是,WebSocket协议使用了http协议中的握手,客户端会向服务器发送一个标记为Upgrade的http请求,告诉服务器我是贵宾,你要升级接待标准,然后服务器response一个101状态给客户端,告诉客户端我准备好了,之后的通信就跟http协议没有半毛钱关系了。

WebSocket只需要实现一次连接(http需要轮询),就可以一直双向通信(http协议就太被动了只有pull服务器才响应,而WebSocket既有pull也有push),直至你自己关闭请求。

客户端:我要建立Websocket协议,而不是吐了吧唧的http
服务端:ok,确认,已升级为Websocket协议
客户端:麻烦你有信息的时候推送给我噢。。
服务端:ok,有的时候会告诉你的。
服务端:balabala
服务端:balabala
服务端:balabala
服务端:balabala


WebSocket也有自身缺陷的,因为它需要跨越无数的路由器、防火墙等等来长久维持连接,有许多不可预测的事情,如这些坑爹的中间节点可能会认为一份连接在一段时间内没有数据发送就等于失效,它们会自作主张的切断这些连接,而无论客户端还是服务器都察觉不到,只能相互徒劳地发送数据。当然了,WebSocket也有应对之策,让服务器和客户端相互发送 Ping/Pong Frame数据包,来维持连接。


WebSocket在Android中的应用,可以使用autobahn0.5.0.jar这个包来实现,这就很简单了,不再详叙!




相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

websocket autobahn webrtc

最近分析webrtc android 的交互流程(房间服务器、信令、穿透等),发现webrtc是使用的是autohahn 的 websocket,初步看了下发现这个库封装的很不错,就分享出来,下面的 ...
  • xyblog
  • xyblog
  • 2015年11月10日 14:28
  • 1125

android 使用 websocket 进行长链接的一个简单的 demo,可以用来收发消息或别的操作,里面用到了 autobahn 的 jar 包

android 使用 websocket 进行长链接的一个简单的 demo,可以用来收发消息或别的操作,里面用到了 autobahn 的 jar 包...

android下的即时通信autobahn

因为只是简单的使用。最后选择了websocket  使用的是autobahn 依赖compile files('libs/autobahn-0.5.0.jar') 建立一个service用来接收...

socket通信,mina长连接通信

  • 2015年09月09日 15:52
  • 547KB
  • 下载

Mina长连接框架实现Android客户端与服务器端通信

一、概述         Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、...

java socket 长连接实例

  • 2015年09月26日 17:20
  • 18KB
  • 下载

iOS客户端socket长连接的一些解决方案

工作以来一直在做iOS即时通讯这方面的东西,说到即时通讯,最常见的就是socket方面的知识,socket被问到的最多就是如何保持长连接。 这里就简单的说些socket的长连接问题。 首先说下iOS上...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:长连接
举报原因:
原因补充:

(最多只允许输入30个字)