首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Comet的客户端技术

Comet的客户端技术
EN

Stack Overflow用户
提问于 2012-03-10 21:36:32
回答 2查看 453关注 0票数 4

我正在尝试为Comet提供一个实用的客户端(JavaScript)实现。(方案编制)谈到了这个理论,但我很难找到一个可行的实现。我知道这里也有一个很好的服务器端需求,但我只对它的客户端部分感兴趣。

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

  1. 如何在JavaScript中检测到已成功建立了连接。就像。如果我使用脚本标记长轮询方法,而浏览器永远无法到达服务器,我怎么会知道呢?
  2. 当长轮询时,如果服务器没有响应,浏览器最终会陷入“请求超时”状态。我如何在Javascript中检测到这一点,并重新建立长期民意测验?
  3. 如何确保我的技术跨浏览器工作?基本上,我想知道正确的方法组合(脚本标记、xhr等)。这将覆盖大多数浏览器。

我试着寻找Comet框架,但是我找到的每一个框架(CometD、气氛)都有一个服务器端实现,使客户端交易对用户来说是透明的。然而,我正试图找出他们如何实现客户端的壮举。我有自己的服务器实现和协议。

EN

回答 2

Stack Overflow用户

发布于 2012-03-10 21:53:51

以下是我的公司如何处理这些问题:

1)如果您可以在不立即收到错误的情况下建立连接,那么您就必须假定连接已经建立。如果你没有立即收到回复(不管是坏的还是其他的),你只需假设它是否有效.为客户端带来一些困难,所以智能地使用序列ids是很重要的。

2)马上再试一次。通常,服务器会在客户端之前超时,并发送错误代码,告诉您发生了什么。只需确保在服务器端使用一些合理的东西,比如20秒的轮询时间。

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

Ryan (node.js的创建者)在这里实现了一个非常简单的聊天客户机/服务器:聊天

祝你好运!

票数 1
EN

Stack Overflow用户

发布于 2012-03-12 10:47:57

  1. 如果传输是一种长轮询,您就不可能知道这一点。我在jQuery套接字中设计长轮询传输时也遇到了同样的问题,因为套接字对象在建立连接时触发open事件。因此,我添加了一条规则,即当服务器接收到第一个长轮询请求时,服务器必须立即响应,以告诉客户端服务器接受此请求并建立连接。对于您的信息,如果第一个长轮询请求在指定的超时时间内未完成,则套接字对象将触发close事件。
  2. 我同意赫希兹的回答。再试一次。
  3. 测试就是答案。传输的结合依赖于浏览器应用程序和服务器应用程序的环境。例如,如果您支持IE6,但不支持跨域连接和移动设备,则不需要使用长轮询传输。使用WebSocket、服务器发送的事件和HTTP流传输就足够了,如果您没有能力准备一个WebSocket服务器,那么正确的传输将是服务器发送的事件和流。

我一直在制作jQuery插座,它是一个服务器JavaScript库,并为基于浏览器的应用程序提供了一个套接字。也许这会对你有帮助。目前,它是前alpha版本,我正在编写一个涉及服务器端处理的文档。

谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9650375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档