1

此聊天是使用“长轮询”还是“http 流”?

http://go-mono.com/moonlight/chat.aspx

4

1 回答 1

3

这不是那么简单的事情。它使用http://www.mibbit.com/chat,这是一个用 Javascript 和 Java 编写的完整 IRC 客户端。在http://blog.mibbit.com/上写博客。

编辑: 这是你的答案

我开始工作的第一部分是浏览器和服务器之间的通信。这是使用 2 个 XMLHttpRequests 完成的。第一个是简单地将数据从浏览器发送到服务器。它利用keep-alive来最小化新连接。

第二个 XHR 是“接收延迟轮询”。它连接到服务器,服务器保持打开状态,直到有可用消息或超时到期。这个也是保持活动状态的,所以下一个请求通过同一个连接。

你最终得到的是 2 个对服务器保持开放的连接,带有数据包(在本例中为 json),以及不时的一些 http 标头。为了确保服务器可以扩展,我使用 nio 在 java 中编写了一个自定义网络服务器。它在一个线程中处理所有连接,正如我所说,它可以扩展到数万个连接。

如果客户端请求一个新的连接,它会向网络服务器发送一个请求,然后连接出去,并开始代理等。它还在 irc 连接的情况下运行一个 ident 服务器,以便 irc 服务器可以识别单个浏览器。我查看了现有的框架等来做这类事情,但我重视学习它是如何工作的,并认为我的用例可能足够具体,能够比一般框架进行更多优化。

于 2010-03-23T17:45:25.383 回答