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

基于HTTP协议之WEB消息实时推送技术原理及实现的更多相关文章

  1. Web端服务器推送技术原理分析及dwr框架简单的使用

    1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...

  2. Web端server推送技术原理分析及dwr框架简单的使用

    1 背景 "server推送技术"(ServerPushing)是近期Web技术中最热门的一个流行术语.它是继"Ajax"之后又一个倍受追捧的Web技术.&qu ...

  3. 基于Web的数据推送技术(转)

    基于Web的数据推送技术 对于实时性数据显示要求比较高的系统,比如竞价,股票行情,实时聊天等,我们的解决方案有以下几种.1. HTTP请求发送模式,一般可以基于ajax的请求,比如每3秒一次访问下服务 ...

  4. WEB 实时推送技术的总结

    前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...

  5. 关于 实时推送技术--WebSocket的 知识分享

    今天学习了关于WebSocket的知识,觉得挺有用的,在这记录一下,也和大家分享一下!!有兴趣的可以看看哦 WebSocket简介 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达 ...

  6. 服务器端实时推送技术之SseEmitter的用法

    这是SpringMVC提供的一种技术,可以实现服务端向客户端实时推送数据.用法非常简单,只需要在Controller提供一个接口,创建并返回SseEmitter对象,发送数据可以在另一个接口调用其se ...

  7. web领域的实时推送技术-WebSocket

    WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex),即是所谓的及时推送技术. 在此之前,很多网站为了实现及时推送技术通常采用的是 ...

  8. dwr3+spring实现消息实时推送

    最近项目要实现一个消息推送的功能,主要就是发送站内信或者系统主动推送消息给当前在线的用户.每次的消息内容保存数据库,方便用户下次登录后也能看到.如果当前用户在线,收到站内信就主动弹出提示.一开始想到的 ...

  9. WebSocket实现站内消息实时推送

    关于WebSocket WebSocket是HTML5 开始提供的一种在单个TCP连接上进行全双工通讯的协议.什么是全双工?就是在同一时间可以发送和接收消息,实现双向通信,比如打电话.WebSocke ...

随机推荐

  1. UINavigationController + UIScrollView组合,视图尺寸的设置探秘(一)

    UINavigationController和UIScrollView是iOS下几种主要的交互元素,但当我搭配二者在一起时,UIScrollView的滚动区域出现了很诡异的现象.我希望UIScroll ...

  2. Ubuntu 如何为 XMind 添加快速启动方式和图标

    目录 Ubuntu 如何为 XMind 添加快速启动方式和图标 Ubuntu 如何为 XMind 添加快速启动方式和图标 按照教程Ubuntu16.04LTS安装XMind8并创建运行图标进行Xmin ...

  3. JavaScript高级知识点整理

    一.JS中的数组 1.数组的三种定义方式 (1).实例化对象 var aArray=new Array(1,2,3,4,5); (2).快捷创建 var aTwoArray = [1,2,3,&quo ...

  4. kylin 连接 hortonworks 中的 hive 遇到的问题

    用 hortonworks(V3.1.0.0) 部署了 ambari (V2.7.3),用 ambari 部署了 hadoop 及 hive. 1.  启动 kylin(V2.6)时,遇到如下问题: ...

  5. spoj Longest Common Substring

    Longest Common Substring SPOJ - LCS 题意:求两个串的最长公共子串 /* 对一个串建立后缀自动机,用另一个串上去匹配 */ #include<iostream& ...

  6. [Oracle入门级]知识概况

    oracle各个版本间的主要技术更新 oracle 增加数据库创建和存储对象 oracle 8i 整体性能提升 oracle9i 实施应用集群 oracle 10g 支持网格计算 oracle 11g ...

  7. echarts图标legend全选功能添加

    平时做图表的时候经常用echarts,确实是一款很好用的插件. 开发中遇到了一个问题,在展示的曲线,也就是legend很多的时候,不太好只展示其中几条.配置中是可以默认设置初始化是否展示,但不适用于全 ...

  8. iOS端VR视频播放(转自简书http://www.jianshu.com/p/1ee1a0d1d320)

    下面是我看了谷歌的一个VR在iOS端开发的文档写的一个demo. 第一步是需要用cocoaPods导入谷歌开发的一个第三方:CardboardSDK,怎么导入就不多说了,这里需要注意的一点是谷歌方面的 ...

  9. kuangbin专题七 HDU1754 I Hate It (单点修改维护最大值)

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...

  10. POJ1054 The Troublesome Frog

    题目来源:http://poj.org/problem?id=1054 题目大意: 有一种青蛙在晚上经过一片稻田,在庄稼上跳跃,会把庄稼压弯.这让农民很苦恼.我们希望通过分析青蛙跳跃的路径,找出对稻田 ...