Web消息推送的技术实现

说到Web推送技术,或者IM即时通讯技术,由于浏览器各种限制条件,很多情况下我们借助轮询技术的思想,实际上web推送技术不在少数。

1.轮询技术(Pull)

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

2.基于长连接的Comet技术

说的长连接技术,听起来非常高大上,但实际上下面的关系就已经基本上是长连接了

客户端请求

Connection:Keep-Alive

服务端返回

Connection:Keep-Alive

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

Comet实际上是机制,而不是说的长连接,要不然怎么被称为反向Ajax,这个机制是什么?

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

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

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

 

转载于:https://my.oschina.net/ososchina/blog/680363

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值