javascript – Comet的客户端技术

我正在尝试为Comet提供实用的客户端(
JavaScript)实现.
http://en.wikipedia.org/wiki/Comet_(programming))谈论理论,但我很难找到一个有效的实现.我知道这里有一个很好的服务器端要求,但我只对它的客户端部分感兴趣.

特别是我想回答的问题是 –

>我如何在JavaScript中检测到连接已经存在
成功建立.例如.如果我要使用脚本标记
长轮询方法,浏览器永远无法访问服务器,
我怎么会知道 ?
>当长轮询时,如果服务器没有响应的话
浏览器最终会陷入“请求超时”状态.怎么样
在Javascript中检测到这一点并重新建立长轮询?
>我如何确保我的技术适用于各种浏览器?基本上我想要
要知道正确的方法组合(脚本标签,xhr等)
涵盖大多数浏览器

我尝试寻找Comet框架,但我发现的每个框架(CometD,Atmosphere)等都带有服务器端实现,并使客户端交易对用户透明.然而,我试图找出他们如何实现客户端专长.我有自己的服务器实现和协议.

谢谢.

最佳答案 以下是我公司解决这些问题的方法:

1)如果您可以在没有立即收到错误的情况下建立连接,则必须假设已建立连接.如果你没有立即收到回复(不好或其他),你只需要假设它正在工作……在客户端做一些艰难的管理,所以重要的是智能地使用序列ID.

2)马上再试一次.通常,服务器将在客户端执行之前超时,并发送错误代码,告诉您发生了这种情况.只需确保在服务器端使用20秒的合理时间进行轮询.

3)您必须使用不同的域名而不是对同一服务的计算机和使用jsonp的其他请求.例如,如果您的页面是从example.com托管的,则通常会有一个chat.example.com子域,因为大多数浏览器一次只允许3个或4个打开的连接到同一个域名.由于原始政策相同,Jsonp是必要的.除此之外:测试,测试,测试.

Ryan Dahl(node.js的创建者)在这里实现了一个非常简单的聊天客户端/服务器:https://github.com/ry/node_chat

祝好运!!

点赞