推送技术

维基百科,自由的百科全书
跳转至: 导航搜索

推送技术,又名反向AJAX,指的是一种基于Internet,将由中心或发布者发出消息传输给用户的技术。与之相对的是拉取(参见AJAX),这种情况下请求是由用户或客户端主动发起的。

常见用途[编辑]

推送技术常常用于消息的订阅。客户端“订阅”服务器提供的多种信息“频道”;一旦有新的信息可用,服务器将此消息推送到客户端上。

其中的典型例子是即时通信服务。消息服务将来自用户的消息或文件尽可能快地推送到接收者一端。无论是非中心式结构(如WASTE)还是中心式结构(如IRCXMPP),他们都允许发送者而不是接收者主动地推送信息。

电子邮件同样可以是一个推送系统:SMTP协议可以成为一种推送技术(参见Push mail)。然而,从邮件服务器到接收者桌面的最后一步通常仍然在使用传统的拉取协议,如POP3IMAP。现代邮件客户端可以通过不断重复收信来使这一步看起来实时。IMAP技术还包含了“IDLE”命令,这样就能够允许服务器在有新邮件到达的时候通知客户端。

点播是另一个例子,这种服务从1990年代开始流行,能够传递新闻和股市数据。网景微软在浏览器大战时期都整合了这种功能,但是在2000年代,其逐渐被RSS等技术取代并淡出。

其他推送系统的用途还包括股票数据发布,在线聊天,拍卖,在线游戏,体育结果发布,终端监视,以及高级网络监控等。

典型实现[编辑]

HTTP 服务器推送[编辑]

HTTP 服务器推送(又称HTTP流)是一种由Web服务器浏览器传输数据的机制。这种机制可以通过多种方法实现。

一般来讲,Web服务器不在向客户端传输数据后中断,而是保持这个连接。这样一旦新的数据到达或事件触发,服务器可以尽快地将数据(通过这个/这些连接)传送到一个或一批客户端。通常Web服务器通过CGI提供这种功能(如Apache上不处理请求头脚本)。

另一种机制是由网景于1995年引入,基于一种特定的名叫“multipart/x-mixed-replace”的MIME类型[1] 当服务器推送一些新数据时,浏览器将解释为文档变化。时至今日,此协议仍然被FirefoxOperaSafari支持,却无法被Internet Explorer支持。[2]其可以应用于HTML文档,也可以用于网络摄像头应用中的图片流。

网页超文本技术工作小组的Web应用1.0版推荐标准[3]包含一种向客户端推送内容的机制。[4][5] 2006年9月1日,Opera浏览器引入了一种名为“服务器发送事件”的实验性系统,这在今天已经成为HTML5标准的一部分。[6]与之相关的另一部分HTML5标准是WebSocket API,这将允许客户端和服务器通过一个全双工TCP连接通信。

Pushlet[编辑]

在这种技术中,服务器利用了持续HTTP连接的优势,将返回持久地保持为“打开”状态(比如,服务器一直没有中断请求),有效地使浏览器在加载完初始化内容后认为页面一直在“加载中”。之后,服务器定时地发送Javascript片段来更新页面内容,实现“推送”。使用这类技术时,客户端不需要使用Java applet或类似的插件来保持服务器连接;客户端将自动地注意到来自服务器的新事件。[7][8]然而,这种方法有一个严重缺陷,服务器无法控制浏览器的超时时间;一旦超时,客户端必须进行一次重新载入。

长轮询[编辑]

长轮询本身不是一种真正的推送技术,而只是传统轮询技术的一个变种。然而,其能够在真正推送技术无法实现时模拟推送机制。

在长轮询机制中,客户端像传统轮询一样从服务器请求数据。然而,如果服务器没有可以立即返回给客户端的数据,则不会立刻返回一个空结果,而是保持这个请求等待数据到来(或者恰当的超时),之后将数据作为结果返回给客户端。

例如,BOSH是一个常见的、长久的、在TCP困难或无法实现的情况下(如在使用浏览器的情况下[9])使用长轮询模拟TCP的技术。这也是一种XMPP中隐含的技术,苹果公司将其用于iCloud推送支持。

Flash XMLSocket[编辑]

这种技术被Cbox等一些聊天应用使用。这种情况下,通过一个Javascript控制的一像素的Flash影片实现XMLSocket,客户端可以建立一条TCP连接实现与中继服务器的单向通信。中继服务器不会从Socket读取任何数据,而仅仅是立刻向客户端发送一个唯一标识符。接下来,客户端通过一个HTTP请求将此标识符发送给Web服务器。这样,Web应用程序就能够通过中继服务器向客户推送消息。中继服务器不需要主动打开TCP连接,这样他可以处理数万连接。在这种模式下,主要瓶颈在于服务器操作系统的TCP协议栈。

参见[编辑]

WebSocket

Comet

Ajax

参考[编辑]