侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Web消息推送的技术实现

2024-05-13 星期一 / 0 评论 / 0 点赞 / 91 阅读 / 3299 字

说到Web推送技术,或者IM即时通讯技术,由于浏览器各种限制条件,很多情况下我们借助轮询技术的思想,实际上web推送技术不在少数。 1.轮询技术(Pull) 轮询技术具有更多的优点,其中之一便是兼容性

说到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.1Connection:UpgradeHost:127.0.0.1:8088Origin:nullSec-WebSocket-Extensions:x-webkit-deflate-frameSec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==Sec-WebSocket-Version:13Upgrade:websocket

Server 完成handshake

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Sec-WebSocket-Protocol: chat

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

 

广告 广告

评论区