很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章。本文主要讲解基于 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. [SinGuLaRiTy] 分治题目复习

    [SInGuLaRiTy-1025] Copyrights (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 1905] 棍的膨胀 (Expanding ...

  2. C#调用WCF问题汇总

    1.添加服务后无法引用,添加服务时打开高级,将下面的选项去掉就可以引用了. 2.在程序中引用后,运行时报“找不到引用协定‘’的默认终结点元素”错误,这是由于在工程的App.config里没有生成配置节 ...

  3. ajax遍历数据生成下拉框

    <script type="text/javascript">        function GetEQIDList(ModuleID)    {        $. ...

  4. 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛

    题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\]  ...

  5. 谁能赢呢? BZOJ 2463

    题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问 ...

  6. 牛客寒假算法基础集训营4 B applese 走方格

    链接:https://ac.nowcoder.com/acm/contest/330/B 构造题,但是有两个特判... 1  2 2  1 然后就水了,血亏 #include<stdio.h&g ...

  7. 【转】eclipse上的.properties文件中文编辑显示问题

    首先,解决.properties文件中的中文编辑问题,我们发现,在.properties文件中输入的中文变成了这个样子: 这是eclipse的.properties文件,默认的编码方式是iso-885 ...

  8. 工具类_SharedPreferencesUtils

    import android.app.Application;import android.content.Context;import android.content.SharedPreferenc ...

  9. 9 Strings

    1       Strings 1.1  Strings and GStrings Groovy允许你使用2种不同类型的字符串类型,分别是java.lang.String和groovy.lang.GS ...

  10. Netcore中实现字段和属性注入

    https://www.cnblogs.com/loogn/p/10566510.html 简单来说,使用Ioc模式需要两个步骤,第一是把服务注册到容器中,第二是从容器中获取服务,我们一个一个讨论并演 ...