文档章节

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

hosser
 hosser
发布于 2015/01/25 14:54
字数 1059
阅读 192
收藏 1

基于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发布》


本文转载自:http://blog.lmlphp.com/archives/18

hosser

hosser

粉丝 192
博文 78
码字总数 4614
作品 3
徐汇
私信 提问
加载中

评论(2)

hosser
hosser 博主

引用来自“wallance1”的评论

web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉得没有那个必要,GoEasy就挺不错的,服务器稳定,代码简洁易懂;官网: https://goeasy.io/
嗯,但是要做好,还是要知其所以然的,第三方的东西终究不太方便。
w
wallance1
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉得没有那个必要,GoEasy就挺不错的,服务器稳定,代码简洁易懂;官网: https://goeasy.io/
Netty干货分享:京东京麦的生产级TCP网关技术实践总结

1、引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用、高性能、高稳定的TCP长连接网关。 早期...

JackJiang2011
2017/12/01
0
0
现代IM系统中聊天消息的同步和存储方案探讨

本文原作者:木洛,阿里云高级技术专家,内容有删减和修订,感谢原作者。 1、前言 IM全称是『Instant Messaging』,中文名是即时通讯。在这个高度信息化的移动互联网时代,生活中IM类产品已经...

JackJiang2011
2017/11/24
0
0
新手入门一篇就够:从零开发移动端IM

一、前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响。 做为IM开发者或即将成为IM开...

JackJiang-
2016/08/03
922
4
移动端IM中大规模群消息的推送如何保证效率、实时性?

本文原题为“大规模群消息推送如何保证实时性?”,来自瓜子二手车IM负责人:封宇,本次内容有修订,感谢原作者(原文链接在文末)。 1、编者注 众所周之,群聊是移动端IM的服务端技术难点所...

JackJiang-
2017/11/20
1K
0
IM消息送达保证机制实现(二):保证离线消息的可靠投递

1、前言 本文的上篇《IM消息送达保证机制实现(一):保证在线实时消息的可靠投递》中,我们讨论了在线实时消息的投递可以通过应用层的确认、发送方的超时重传、接收方的去重等手段来保证业务层...

JackJiang-
2016/11/18
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
今天
11
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
12
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
22
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
13
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部