长连接

原创 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这个包来实现,这就很简单了,不再详叙!




android websocket client 如何调用autobahn.jar

Android调用  autobahn.jar:        1.下载源码:使用library: https://github.com/tavendo/AutobahnAndroid;     ...
  • szfreechange
  • szfreechange
  • 2015年06月14日 15:20
  • 948

Ajax实现Web长连接

这篇文章写的很好Web 通信 之 长连接、长轮询(long polling),受益匪浅。 1.什么是长轮询,长连接用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停...
  • A__yes
  • A__yes
  • 2016年03月26日 21:34
  • 3054

异步长连接遇阻塞,探索,以及解决

 在试验聊天程序的时候,利用AJAX保持着一个长连接监听新的聊天信息,之后又调用了另外一个AJAX来发言,于是就发生了一个AJAX线程被阻塞的问题。 在未监听到新的聊天信息的之前,发言用的AJAX就无...
  • guoerwei
  • guoerwei
  • 2011年06月10日 00:33
  • 2017

app中的长连接与实现方式

http://mrpeak.cn/blog/http2/   --- 原文 http2.0的好处不仅仅是multiplexing,请求压缩,优先级控制,server push等等都是亮点。 ...
  • qqq2830
  • qqq2830
  • 2016年11月11日 18:59
  • 2927

JavaScript学习——web通信长连接

ajax实现长连接: $(fun...
  • u013237862
  • u013237862
  • 2016年07月05日 15:54
  • 1254

如何从一台客户机向服务机发起40亿TCP长连接?

这绝不是标题党!其实这是一篇“科普”文章,讲述了关于“socket=((client_ip:client_port)-(server_ip:server_port),pocotol)”的一个普遍的误解...
  • lostaway
  • lostaway
  • 2014年09月21日 14:40
  • 4436

php 实现长连接

长连接技术(Long Polling) 在服务器端hold住一个连接, 不立即返回, 直到有数据才返回, 这就是长连接技术的原理 长连接技术的关键在于hold住一个HTTP请求, 直到有新数据时才...
  • wolfqong
  • wolfqong
  • 2016年06月14日 21:28
  • 2908

维持长连接

  现成的长连接应用--Connection:keep-alive 在HTTp协议请求和响应中加入这条就能维持长连接。再封装HTTP消息数据体的消息应用就显的非常简单易用 Keep-Alive...
  • hongzhao129
  • hongzhao129
  • 2010年04月19日 11:03
  • 4272

基于NIO的长连接的实现已开放到github

长连接相对于短链接来讲,可以减少连接的建立和释放的开销,进而提高通信的效率,而长连接最大的问题是对于连接池中连接的维护。...
  • yangbutao
  • yangbutao
  • 2014年01月20日 00:19
  • 12958

Http长连接的例子_亲测可用哦

一、什么事Http长连接:在网上有很多很多关于Http长连接的文章,但是我看了很多都看不懂。自己总结的所谓的http长连接就是在一请求一个页面后,在服务器端不断开http连接,而是通过response...
  • u012613903
  • u012613903
  • 2016年10月31日 11:06
  • 5328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:长连接
举报原因:
原因补充:

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