Web消息推送的技术实现

说到Web推送技术,或者IM即时通信技术,因为浏览器各类限制条件,不少状况下咱们借助轮询技术的思想,实际上web推送技术不在少数。html

1.轮询技术(Pull)html5

轮询技术具备更多的优势,其中之一即是兼容性强,有些人把轮询分为定时轮询长轮询,实际上换汤不换药,轮询就是轮询,改一下调用时机难道就是一种新技术?web

2.基于长链接的Comet技术浏览器

说的长链接技术,听起来很是高大上,但实际上下面的关系就已经基本上是长链接了服务器

客户端请求websocket

Connection:Keep-Alive

服务端返回异步

Connection:Keep-Alive

那么,问题来了,Comet到底作了什么?socket

Comet其实是机制,而不是说的长链接,要否则怎么被称为反向Ajax,这个机制是什么?.net

1.首先咱们确保链接都是Keep-Alive,也就是说服务器和客户端保持Socket链接不关闭,不断开的长链接。code

2.咱们须要把服务器端的Socket Client保存起来,必要的时候调用

3.而后咱们经过服务器端的Socket Client向客户端发送数据

(注意:由于HTTP协议的约定,每次发送的数据必须具备响应头+响应体,不然浏览器没法识别数据) 

也就是说,Comet不是长链接技术,而是一种推送技术,但他要维持长链接,基于长链接技术。

可是遗憾的是,不少http请求你根本拿不到Socket Client,好在是Servlet3.0实现了能够将连接Context持有起来的异步通信技术

AsyncContext ac = request.startAsync();

具体用法参考

http://blog.csdn.net/kuyuyingzi/article/details/18843487

3.Server Event技术

Server-Event是HTML5基于事件流的推送技术,这种技术是基于Keep-Alive的轮询技术?说到这里你可能糊涂了,Comet也是基于长链接,为何就是反向Ajax,而这种是轮询呢,其实,Comet自始至终使用的是同一个Socket链接,可是Server-Event可不同,他会产生不少Keep-Alive的链接,可是使用的时候他会从链接池中选择其一,这就是最本质的区别。

用法参考:

http://www.runoob.com/html/html5-serversentevents.html

4.WebSocket技术

WebSocket协议(RFC6455)其实是长链接,这种和Comet比起来可伸缩性比较好,一样也在Servlet 3.0中实现了,具体用法这里不说了,想了解详细信息,请查看以下连接。

http://www.rfc-editor.org/rfc/rfc6455.txt

这里附上WebSocket协议

Client开始handshake

GET / HTTP/1.1
Connection:Upgrade
Host:127.0.0.1:8088
Origin:null
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==
Sec-WebSocket-Version:13
Upgrade:websocket

Server 完成handshake

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

握手成功,即可进行数据交互

相关文章
相关标签/搜索