【发布时间】:2010-03-23 17:38:02
【问题描述】:
此聊天是使用“长轮询”还是“http 流”?
【问题讨论】:
-
这不是编程题吧?
标签: ajax comet chat irc long-polling
此聊天是使用“长轮询”还是“http 流”?
【问题讨论】:
标签: ajax comet chat irc long-polling
事情没那么简单。它使用http://www.mibbit.com/chat,这是一个用 Javascript 和 Java 编写的完整 IRC 客户端。博客http://blog.mibbit.com/。
编辑: Here's your answer。
我开始工作的第一部分是浏览器和服务器之间的通信。这是使用 2 个 XMLHttpRequest 完成的。第一个是简单地将数据从浏览器发送到服务器。它利用 keep-alive 来最小化新连接。
第二个 XHR 是“接收延迟轮询”。它连接到服务器,服务器将其保持打开状态,直到有可用消息或超时到期。这个也是 keep-alive,所以下一个请求通过同一个连接。
你最终得到的是两个对服务器保持开放的连接,带有数据包(在本例中为 json),以及不时的一些 http 标头。 为了确保服务器可以扩展,我使用 nio 在 java 中编写了一个自定义网络服务器。它在一个线程中处理所有连接,正如我所说,可以扩展到数万个连接。
如果客户端请求一个新的连接,它会向 webserver 发送一个请求,然后连接出去,并开始代理等。它还在 irc 连接的情况下运行一个 ident 服务器,以便 irc 服务器可以识别单个浏览器.我查看了现有的框架等来做这类事情,但我很重视了解它是如何工作的,并认为我的用例可能足够具体,能够比一般框架进行更多优化。
【讨论】: