此聊天是使用“长轮询”还是“http流媒体”?
答案 0 :(得分:3)
这不是那么简单。它使用http://www.mibbit.com/chat,这是一个用Javascript和Java编写的完整IRC客户端。博客http://blog.mibbit.com/。
修改: Here's your answer。
我开始工作的第一部分是浏览器和服务器之间的通信。这是使用2个XMLHttpRequests完成的。第一个是简单地将数据从浏览器发送到服务器。它利用keep-alive,最大限度地减少新连接。
第二个XHR是'接收懒惰轮询'之一。它连接到服务器,服务器将其保持打开状态,直到有可用消息或超时到期为止。这个也是保持活跃状态,所以下一个请求也是同一个连接。
你最终得到的是2个连接对服务器开放,包含数据包(本例中为json),以及一些http标头。 为了确保服务器可以扩展,我使用nio在java中编写了一个自定义Web服务器。它处理单个线程中的所有连接,正如我所说,它可以扩展到数万个连接。
如果客户端请求新连接,它会向Web服务器发送请求,然后连接,并开始代理等。在irc连接的情况下,它还运行一个ident服务器,以便irc服务器可以识别各个浏览器。我查看了现有的框架等来做这类事情,但我很重视学习它是如何工作的,并认为我的用例可能足够具体,能够比一般框架更优化。