很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章。本文主要讲解基于 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 轮训要好的多,在实时要求比较高的情况下,比如聊天,订单支付等情况下比轮训的方式更加节省资源,在时间上也让用户感觉不到消息有的任何延迟。

推送原理图如下:

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

php消息实时推送技术,基于HTTP协议之WEB消息实时推送技术原理及实现相关推荐

  1. 基于 HTTP 协议的几种实时数据获取技术

    HTTP协议 HTTP 协议是建立在 TCP 协议上的应用层协议,协议的本质是:请求----应答 即对于 HTTP 协议来说,服务端给一次响应后整个请求就结束了,这是 HTTP 请求最大的特点,也是由 ...

  2. 基于SIP协议的IP电话增值业务实现技术

    基于SIP协议的IP电话增值业务实现技术 王瑜,乐正友 (清华大学电子工程系,北京 100084)    摘  要:讨论了SIP协议以及基于SIP协议的IP电话增值业务实现技术,并对SIP CGI.C ...

  3. 篡改计算机网络,基于TCP协议的网络数据实时篡改.doc

    基于TCP协议的网络数据实时篡改 基于 TCP 协议的网络数据实时篡改 金 瓯,施 勇,薛 质(上海交通大学信息安全工程学院,上海 200240)[摘 要]首先对网络数据实时篡改作了定义,指出攻击者介 ...

  4. 实时推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(八)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  5. springboot+websocket+sockjs进行消息推送【基于STOMP协议】

    1.浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打 ...

  6. java xmpp消息推送_基于XMPP协议(openfire服务器)的消息推送实现

    最近好像有不少朋友关注Android客户端消息推送的实现,我在之前的项目中用到过Java PC客户端消息推送,从原理讲上应该是一致的,在这里分享一下个人的心得. 消息推送实现原理 这里的消息推送,通常 ...

  7. 基于workerman实现的web消息推送站内信功能

    流程说明 使用 web-msg-sender 作为 服务器监听程序. 客户端(浏览器)通过websocket连接 服务器监听程序. 服务器应用程序(后端) 通过curl访问 服务器监听程序,将需要推送 ...

  8. 基于HTTP协议的几种实时数据获取技术

    HTTP协议 HTTP协议大家都很熟悉了,开始本文之前,首先简单回顾一下HTTP协议. HTTP协议是建立在TCP协议上的应用层协议,协议的本质是请求----应答: 即对于HTTP协议来说,服务端给一 ...

  9. 基于 HTTP 协议的 3 种实时数据获取技术

    HTTP协议 HTTP协议大家都很熟悉了,开始本文之前,首先简单回顾一下HTTP协议. HTTP协议是建立在TCP协议上的应用层协议,协议的本质是请求----应答: 即对于HTTP协议来说,服务端给一 ...

最新文章

  1. 每日一皮:程序员新手尝试新框架的时候
  2. IOS7最新的系统漏洞
  3. About Gnu Linker2
  4. 怎么merge分支_实战 Git 分支策略
  5. vue 打包上线后字体图标不显示
  6. 怎样下载C/C++的免费、开源且跨平台IDE——Code::Blocks
  7. 网关过滤器验证token
  8. cesium获取模型实时坐标_Cesium 顶点着色器中求解模型坐标
  9. ADT安装好在Eclipse后运行模型Android提示Re-installation fai...
  10. kubernetes之CI/CD工具jenkins第二篇,helm的使用
  11. abaqus python 建立节点集合_Abaqus中Python通过findAt方法建立region区域
  12. (一)mybatis之JDBC介绍
  13. SQLServer数据库处于恢复挂起状态的解决办法
  14. 21天学通JAVA-第7版 入门到精通完美高清PDFamp;光盘源代码下载
  15. IDEA代码格式化快捷键
  16. AUTOCAD——图案填充命令
  17. js如何获取当前页面url网址信息
  18. Kotlin学习教程推荐
  19. 彻底关闭Windows10自动更新的详细解决方案
  20. TF flags的简介

热门文章

  1. c#中类的简单使用学习
  2. git删除中间某个commit
  3. 数据分析过程注意事项
  4. 大数据如何推动医疗行业的发展
  5. vue3 中使用动画技术
  6. axios 文档中文翻译
  7. linux 修改密码和端口号_WINDOWS/LINUX系统修改管理员密码方法
  8. android快速开发框架_【程序源代码】springboot和ssm的极速轻量快速开发框架
  9. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍
  10. 软件基本功能测试用例,测试用例实例—常见功能测试点().docx