大中型网站技术架构浅析 - 实时通信

本文所讲述的『实时通信』主要围绕浏览s器端和服务器端之间的实时通信。大中型网站技术架构浅析 系列之一。

实时通信主要分3大类:

1. Pull技术,轮询(Polling)

客户端定时轮询请求,服务器端立刻返回。

  • 优点:短链接,服务器处理方便,支持跨域。
  • 缺点:有一定延迟
微博未读微博数和未读消息(评论,@)就是用polling实现的。
应用场景:对实时性要求不高的应用,如新微博提示,评论提示,回复提示等。

2. Push,反向Ajax(Reverse Ajax)或者叫Comet.

实现方式主要有2种,长轮询(Long Polling)和 流推送(Comet Streaming)

2.1 长轮询(LONG POLLING)

长轮询有2种实现方式:

2.1.1 XHR Long Polling

客户端发起一个XHR ajax request,服务器不马上返回,而是hold住这个connection,直到有数据要push给客户端时(或time out)才发送response;客户端收到response之后马上再发起一个新的request,周而复始。

  • 优点:减少轮询,低延迟, 各大浏览器均支持
  • 缺点:不可跨域,服务器需要hold 住大量connection.

2.1.2 Script Tag Long Polling

原理跟XHR Long Polling类似,只是结合long polling和jsonp,用来支持跨域(cross-domain)请求。

  • 优点:减少轮询,低延迟,支持跨域,各大浏览器均支持
  • 缺点:服务器需要hold 住大量connection.
微博私信提示就是用Script Tag Long Polling实现。
Long Polling的应用场景:对实时性要求较高和浏览器覆盖面广的应用,如私信等一些简单即时聊天应用。

2.2 流推送(COMET STREAMING)

Comet Streaming又有2实现方法.

2.2.1 Multi-part XMLHttpRequestg

浏览器必须支持的 multi-part 标志,通过XMLHttpRequest发出request,服务器hold住这个connection,然后可以通过HTTP1.1的chunked encoding机制不断push数据给浏览器直到timeout数据给浏览器直到timeout 或者manual close connection.

  • 优点:客户端一次连接,服务器数据可多次推送。
  • 缺点:并非所有的浏览器都支持 multi-part 标志。

2.2.2 Hidden IFrame(Forever IFrames)

JS生成一个iframe, 发出request,服务器是hold住这个connection,然后可以通过HTTP1.1的chunked encoding机制不断push数据给浏览器直到timeout 或者manual close connection .

  • 优点:客户端一次连接,服务器数据可多次推送。几乎所有支持 iframe 的浏览器上都可用。
  • 缺点:不可跨域,错误处理可控性不强。
流推送的应用场景:实时监控系统,即时聊天

3. WebSocket

3.1 WEBSOCKET

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送

  • 优点: 长连接,双向、低延迟和易于处理错误。
  • 缺点:HTML5的新规范,只有部分浏览器支持。服务器端(java)还没有WebSocket 相关规范,服务器厂家各自为政。

3.2 FLASHSOCKET

WebSocket的替代品, 客户端JavaScript与Flash交互调用:JS调用Flash Socket接口发送数据,Flash Socket与服务器端Socket服务器通信

  • 优点: 支持所有带flash的浏览器
  • 缺点: 需要安装flash插件,要求打开防火墙的 843 端口,以便 Flash 组件能够执行 HTTP 请求来检索包含域授权的策略文件。
WebSocket的应用场景:实时性要求高,双向通信,如页游,实时协作(eg:Google docs)

4. 技术选型建议

对于实时性要求高和并发量大的应用,建议方案:


桌面端
WebSocket(高级浏览器)+ FlashSocket(IE6+)

移动端
WebSocket + 长轮询(对不支持Websocket的浏览器)

前端
socket.io

服务器端
socketio-netty

对于实时性要求高和并发量一般的应用,建议方案:


桌面端
流推送Hidden IFrame(支持主流浏览器)

移动端
长轮询

服务器端
支持servlet 3.0 的容器(jetty8+,tomcat7+)

稍后补一篇学习 socket.io知识文章

转:http://kenny7.com/2013/05/technical-guide-for-website-realtime-communication.html

时间: 2024-10-24 22:22:33

大中型网站技术架构浅析 - 实时通信的相关文章

JavaWeb网站技术架构

JavaWeb网站技术架构总结 题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充(附带架构装逼词汇). 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的,当然对于我们开发人员来说,一个好的架构也不是一蹴而就的. 初始搭建 开始的开始,就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们的文件,数据库,应用都在一个服务器上. 服务分离 随着系统的

《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 一.可伸缩与可扩展-傻傻分不清楚 上篇笔记我们学习了可伸缩架构,但在实际场合中,包括许多架构师也常常混淆可伸缩和可扩展,用可扩展表示伸缩性.那么在此,跟随作者我们来理清这两个概念,避免我们以后对其傻傻分不清楚. (1)扩展性(Extensibiltiy) 指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力.我们不禁想到了面向对象中一大原则:开闭原则,对扩展开放,对修改封闭.也就说,当系统新增一个功能时

《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 首先,所谓网站的伸缩性,指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力.在整个互联网行业的发展渐进演化中,最重要的技术就是服务器集群,通过不断地向集群中添加服务器来增强整个集群的处理能力. 一.网站架构的伸缩性设计 1.1 不同功能进行物理分离实现伸缩 (1)纵向分离:将业务处理流程上得不同部分分离部署,实现系统的伸缩性: (2)横向分离:将不同的业务模块分离部署

《大型网站技术架构》读书笔记之八:固若金汤之网站的安全性架构

此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. 一.网站应用攻击与防御 二.信息加密技术与密钥安全 三.信息过滤与反垃圾 四.电子商务风险控制 五.学习总结 转眼之间,<大型网站技术架构>的读书笔记到此就结束了.最近时间非常紧,因此本篇没有详细对笔记进行介绍(本篇涉及太多内容,而且都是安全相关的).通过本书的学习,我们从高性能.高可用.伸缩性.可扩展性.安全性五个方面的架构学习了每个方面经典的技术方案,虽然以理论偏多,但还是可以从中管中窥豹,一览

大型网站技术架构的演进

最近我在阅读 2 本关于大型网站架构的书:<大型网站技术架构--核心原理与案例分析>李智慧.<大型网站系统与 Java 中间件实践>曾宪杰. 我期望从这些书中学习到大型网站是如何做架构的,这个过程会遇到什么问题.当看完这 2 本书后,我总结出两个大问题: 1. 网站技术架构为什么会演进?换个说法就是为什么网站会变大? 2. 演进的过程会遇到什么问题?或者说为了演进,会遇到什么问题? 网站技术架构为什么会演进 我个人总结出来我们的技术架构演进的两种驱动力,驱动着我们为什么演进网站的技

《大型网站技术架构核心原理与案例分析》阅读笔记-01

通过阅读该书籍我们能够更加清楚的树立大型网站的的技术发展历程,剖析大型网站技术架构模式,深入的讲述大型互联网架构核心原理,并通过一些典型的技术案例来讲述大型网站开发全景视图,该书籍深入的阐述了各种大型网站面临的各种架构问题及解决方案. 在第一章第一篇大型网站架构演化中了解到与传统企业应用系统相比,大型互联网应用系统具有高并发大流量.高可用性.海量数据.用户分布广泛,网络情况复杂.安全环境恶劣.需求快速变更,发布频繁.渐进式发展等特点:大型网站架构演化发展历程经历了初始阶段的网络架构它的应用程序.

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快

《大型网站技术架构 -核心原理与安全分析》读书笔记

大型网站架构演化的价值观 网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候去追求网站的架构是舍本逐末,得不偿失的.小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长. 网站架构设计误区 一味追求大公司的解决方案 大公司的经验和成功模式固然重要,值得学习借鉴,但如果因此而变得盲从,就失去了坚持自我的勇气,在架构演化的道路上迟早会迷路. 为了技术而技术 网站技术是为业务而存在的,除此毫无意义.在技术选型和架构设计中

大型网站技术架构(七)--网站的可扩展性架构

大型网站技术架构(一)--大型网站架构演化 大型网站技术架构(二)--架构模式 大型网站技术架构(三)--架构核心要素 大型网站技术架构(四)--网站的高性能架构 大型网站技术架构(五)--网站高可用架构 大型网站技术架构(六)--网站的伸缩性架构 扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力. 设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性.模块通过分布式部署,独立的模块部署在独立的服务器上(集群)从物理上分离模块之间的耦合关系