打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CometD JavaScript 传输

原文地址:

                  http://cometd.org/documentation/cometd-javascript/transports

 

CometD JavaScript 传输

 

 

sbordet 提交于星期三,2009/7/29-13:09

 

 

JavaScript CometD 传输

 

 

Bayeux 规范定义了两个强制性传输过程:

long-polling(长轮询)

callback-polling(回调轮询)

 

 

JavaScript CometD 实现完全支持这两个传输过程。

 

 

最新的浏览器(例如,火狐 3.5)使用长轮询传输也可以跨域Bayeux通信,请参阅下面的跨域模式。

 

 

长轮询传输

 

 

长轮询传输是默认传输。

该传输被用于在同一个域,和跨域模式下与 Bayeux 服务器发生通信(见下文)。

通过简单的XMLHttpRequest(内容类型的text/jsonPOST请求)调用将数据发送到服务器。

 

 

回调轮询传输

 

 

回调轮询传输是与 Bayeux 服务器在不同域发生通信时使用的传输(当不支持跨域模式时,见下文的跨域模式章节)。

 

 

当到一个不同域去下载脚本时,众所周知XMLHttpRequest的调用是被限制的。(请参阅下面替代的跨域模式解决方案)。

为了克服起始地址的限制,此传输使用 JSONP 脚本注入:而不是使用注入src 属性指向 Bayeux 服务器的<script>元素的XMLHttpRequest

浏览器会注意到脚本元素注入并执行 GET 请求到指定源的 URL

Bayeux 服务器是意识到这是一个 JSONP 请求并答复由浏览器执行的JavaScript函数(并在 JavaScript Cometd 现实中回调)。

 

 

在使用此传输中有三个主要缺点:

这个传输是啰嗦的。

这是因为,浏览器按顺序执行注入的脚本,直到脚本已完全"下载"或它无法执行。

例如,假设一个脚步注入是涉及长轮询的通信,或是为了发布一条消息。浏览器注入长轮询脚本,要求 Bayeux 服务器上,但 Bayeux 服务器保存请求等待服务器端事件(这样的"脚本"未有"下载)"。浏览器注入长轮询脚本,Bayeux 服务器有了一个请求,但是Bayeux 服务器要留着这个请求以等待服务器事件(所以“脚本”没有“下载”)。然后,浏览器注入发布脚本,那个被服务器留着的请求被回复(所以“脚本”完成“下载”)。不管怎么样,浏览器没有执行第二个脚本,因为没有执行第一个脚本(从它没有完成“下载”)。在这些条件下:在长轮询返回后,发布仅仅执行一次。为了避免Bayeux 服务器有情况,在使用回调轮询传输的情况下,为每条从客户端来的消息使用客户端长轮询,这就是为什么传输是啰嗦的:长轮询通常频繁返回。

消息大小是有限的。

支持 IE7是必须,IE7 GET 请求具有2083字符限制。

对故障的反应较慢。

这是因为,如果脚本注入的 URL返回的是错误(例如 Bayeux 服务器已关闭),会被浏览器忽略。

 

 

跨域模式

 

 

火狐 3.5 介绍了XMLHttpRequest可以在不同域调用的能力(请看火狐 3.5文档)。

 

 

在版本 1.0.0.rc0中, JavaScript CometD 实现也支持它,不需要在客户端上进行配置(如果浏览器支持客户端跨域调用,它们将会被使用)但需要在服务器上做一点配置。请参阅本文档的服务器配置。

 

 

要使用跨域模式,您需要:

一跨域兼容浏览器(例如 Firefox 3.5

一兼容服务器 (例如:配置了CrossOriginFilterjetty

 

 

使用这个程序,与 Bayeux 服务器的跨域通信,推荐使用长轮询传输,避免回调轮询传输的弊端。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
浏览器与服务器的消息通信
Ajax 技术汇总
AJAX开发简略 (第一部分)
Start AJAX
Ajax简介
web前端学习路线分享了解AJAX是什么
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服