【转载】基于HTTP协议之WEB消息实时推送技术原理及实现

基于HTTP协议之WEB消息实时推送技术原理及实现技术

maybe yes 发表于2014-11-22 18:41

原文链接 : http://blog.lmlphp.com/archives/18  来自 : LMLPHP后院

很 早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章。本文主要讲解基于HTTP1.1协议的WEB推送的技术原理及 实现。本人曾经在工作的时候也有做过一些用到网页消息实时推送的项目,但是当时实现的都不是很完美,甚至有时候是通过Ajax轮训的方式实现。在网上也找 过不少的资料,真正说到点子上的几乎没有,很多文章大都是长篇大论,说了一些新有名字,什么“HTTP长连接”,“实时推送”,“Comet长连接推送技 术”等。但真正提到如何实现实时推送的文章倒是没有看到过。

我的一个开源项目WebChat,是一个基于网页的聊天室系统,这个系统是本人 毕业前做的,代码一直没放到GITHUB上。因为本人毕业论文设计是一款基于安卓平台的实时推送的应用,开发完安卓推送系统后让我对推送有了更深认识,到 后来毕业论文结束后就想着要将聊天室项目公开,最近放到了GITHUB上,取了个名字叫WebChat,一开始还想叫WeChat,后来感觉很俗,当时也 想不出好名字,感觉只要是像样的英文单词都被占有了。WebChat的git地址是 git@github.com:leiminglin/WebChat.git,服务端使用PHP实现,前端使用了JavaScript,JQuery。 这里谈到这个项目主要是因为WebChat用到了推送技术,想学习的朋友可以下载看看,该项目可以运行在几乎所有浏览器上,本人测试IE6都没问题。

说 到网页推送,不得不说Flash的WebSocket,这个应该比HTTP实现的要好,但是现在HTML5出来了,Flash慢慢的也将淡出历史舞台。其 实有很多的网页消息推送应用,在HTML5之前,用的比较多的还是Flash,比如百度商桥吖,新浪微博吖等等。但这些出名的应用也不全都使用Flash 实现,之前发现WebQQ的推送是使用HTTP实现的,但是也不排除有部分模块不是使用的是Flash。

关于如何实现消息实时推送,能想到 的前提一定是长连接,如果没有一个连接在保持着,如何知道消息已经到了呢。所以要实时也是需要花费代价的,服务器需要保持客户端的链接。在使用HTTP实 现实时推送之前,我们需要了解HTTP协议,HTTP1.1是支持长连接的,但是HTTP是没有状态的,一次请求,服务器给予响应,这个请求就结束了,不 久之后就会断开连接,不可以在这个连接基础上再回应,然后再接收,要真是这样就成了Socket通信了。要在这个基础上实现消息实时推送,必须要有一个连 接发出请求然后在等待消息,就让它一直在等待,一旦接收到了消息回应立即发出下一个请求。剩下的事情就是服务端的事情了,服务端需要有个Socket服务 在侦听客户端的长连接请求和发消息的指令,这样就可以实现实时消息推送了,这种方式实现的推送比Ajax轮训要好的多,在实时要求比较高的情况下,比如聊 天,订单支付等情况下比轮训的方式更加节省资源,在时间上也让用户感觉不到消息有的任何延迟。

推送原理图如下:

基于HTTP1.1的消息实时推送技术原理-LMLPHP后院

关于开源聊天室应用WebChat,请查看我的另一篇文章《开源网页聊天室应用WebChat发布》


转载于:https://my.oschina.net/hosser/blog/371543

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值