翻译wiki上面的文章:http://en.wikipedia.org/wiki/Push_technology
对server-push有个更加完整的了解。
Push technology 或者说 server push ,是说一种基于互联网的交流,其请求是由publisher或者说中央服务端。与pull technology不同,pull technology是一种请求由接受方或者说客户端发起的。
通用领域
Push 服务经常使用在这种场景,对某一信息有偏好,希望得到及时的信息。也也称为发布/订阅模式。一个client 可能会订阅(subsribe)多种信息,就会链接到这些信息的通道(Channels)上面。只要一有新的内容出现在这些通道里面,服务端就会把信息 Push给 订阅的用户。
同步会议(Sychronous conferencing) 和及时消息(instant messaging) 是典型的push 服务的案例。当用户一接受到消息服务就有聊天信息有时是文件被push到用户手中。如分散的点对点程序(比如WASTE)或者是集中式程序(比如是IRC 或者XMPP)就允许push文件,这就是说sender发起数据传输而不是接收者,
Email也是一种服务推的系统:SMTP协议是基于一种push协议的(see Push e-mail)。然而,最后一步--从邮件服务器到客户端电脑--典型使用的是pull协议就像pop3或者imap. 新式的e-mail客户端通过不停的polling 邮件服务器,频繁的check 新邮件,却这一步看起来像是瞬时的,而IMAP 协议包含了 IDLE命令,这个命令允许服务端告知客户端有新信息到达。而原始的BlackBerry就是一个典型的受欢迎的push 技术程序,应用Push technology完成了无线email。
另一种流行的使用了push 技术的互联网应用,就是PointCast Network,盛行在1990s.它主要是发布新闻和股票市场信息。NetScape和Microsoft 都将它集成在软件中来增加浏览器大战的资本,然而后期慢慢的落寞了,在2000s被RSS(pull 技术)替代。
另外一些push技术就在使用在web 应用上面,发布一些市场数据(股票代号),在线聊天系统(webchat),拍卖,在线博彩和游戏,体育结果,监控主机系统和传感器网络监控系统。
技术
HTTP server push
HTTP server push(也称为 HTTP streaming)是一种从web服务器发送信息到web浏览器的机制。HTTP server push 有很多种机制来进行达到push效果。
通常,web服务端在发送response 信息给客户端后,不会关闭这个链接。会保持这个链接open,以至于当有新的事件发生,它可以马上告知到一个或多个客户端。如果关闭了,那事件数据只能等到客户端发送新的请求的时候,才能发送到客户端去。大多数的web服务器都提供这种功能通过CGI(e.g Non-Parsed Headers scripts on Apache)
另外一种机制与一个特殊的MIME标记mutilpart/x-mixed-replace有关,这个是由netscape在1995年引入的概念。web浏览器会将这个翻译为:当服务端push 一个新版本给客户端 文档就改变一次(没能理解.) 现在还被firefox、Opera和Safrai支持,可是被微软所无视。这种方式可以应用在HTML文档上面,也可以应用在流媒体像网络摄像头应用。
WHATWG web1.0应用程序建议引入一种机制来push信息到客户端。在2006.9.1,Opera 浏览器实现了一种新的实验技术,称之为“Server-Sent Events” 现在也是HTML5的一个标准部分。另外一种就和HTML5有关的Web Sockets API,这个就允许web服务端和客户端以一种全双向的TCP链接来互相通信息。Web Scokets 从Google 的Chrome浏览器4.0.249.0版本中开始支持,并且有一种商业的java script库Kaazing 仿真模拟这种效果。
Java pushlet
pushlet是一种技术最初用于开发Java web应用,但这种技术也可以应用在其他的web应用框架里面。这种技术里面,服务器充分里面持久的HTTP链接并且让response 永久的open着(意味着永远不会关闭response)。这种方式就是让浏览器一直在loading的状态,而基本信息已经完全传送过去了。服务端就偶尔不定期的发送一些java script的片段到浏览器来更新页面信息,从而实现push的效果。使用这种技术,客户端就不必使用Java applets 或者其他的插件来保持与服务端的链接。客户端可以自动的得到新事件的通知。然后这种方法的比较严重的缺点,就是服务端不能控制浏览器的超时问题。当超时发送在浏览器的时候,页面刷新是必须的。
Long polling(长轮询)
Long polling 是一种传统的polling技术的变异,效仿成信息由服务端推送到客户端的模式。在一个长polling的时候,client向server请求信息就像传统的poll,然而当服务端没有信息发送给客户端的时候,不同于传递一个空的reponse,服务端会保持这个请求,然后等待一些有效的信息发送给客户端。一旦信息要发送的时候(或者在适宜的timeout之后)一个完整的response会发送给client。client通常会立马又重新请求信息给服务器,所以服务端会经常有一个有效的等待着的请求用来发送reponse 事件信息。
Long polling 不是一个推技术,但是可以使用在 real push不可能实现的场景中。
其他的技术
Comet 这一词被用来描述在Ajax web应用中push 技术,它可以被称为是一种HTTP server push和Long polling的综合总称。
XMPP也被用作push技术,特别是在PubSub的扩充。苹果公司使用这种技术作为Mobile Me的push支持。
BOSH是保持HTTP长期有效的技术--XMPP使用着,然后这个可以使用在web上面。规范说明书(XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH))说明: 这个说明说定义了一个传输的协议可以模拟HTTP长期有效,且在双向的TCP的两个链接实体之间(比如客户端和服务器)可以有效的使用多重的同步的HTTP req/res对,而没有需要----不停频繁的polling或者是长时间保持的response。