gpt4 book ai didi

javascript - Comet 的客户端技术

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:40 25 4
gpt4 key购买 nike

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

具体来说,我要回答的问题是 -

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

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

最佳答案

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

1) 如果您可以在不立即收到错误的情况下建立连接,则您必须假设连接已建立。如果您没有立即收到响应(无论是坏的还是其他的),您只需要假设它在工作......这会导致一些艰难的管理客户端,因此明智地使用序列 ID 很重要。

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

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

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

祝你好运!

关于javascript - Comet 的客户端技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com