如何保持HTTP连接的活跃?

4
有没有办法使用JavaScript保持HTTP连接的活性?

你所说的“alive”具体指什么?你是想模拟服务器推送吗? - Myles
最好告诉我们你想要解决的具体问题。 - spender
保持连接以获得更快的响应。我听说这种技术在浏览器游戏中被用来实现几乎实时的行为。 - powtac
JavaScript游戏,还是Flash游戏?在Flash方面有更多的选择。 - spender
我正在寻找JS的解决方案。 - powtac
2个回答

7
简而言之,我认为JavaScript中长连接的概念实际上是围绕一种通信方式——COMET(一种基于HTTP长轮询的服务器推送技术)展开的。这可以通过多种不同的方式实现,但基本上涉及客户端(使用XmlHttp)立即从服务器请求数据,并且服务器保留响应直到触发某些事件。收到此响应后,客户端立即发出另一个请求(这将再次在服务器端挂起,直到需要发送某些内容)。这模拟了服务器推送,但实际上只是以巧妙的方式延迟响应。最坏的情况下,可能会有相当高的延迟(即需要发送2条消息,因此必须重复两次循环,并涉及所有相关成本),但通常情况下,如果消息速率较低,则会给人以合理的实时推送印象。
实现此类通信的服务器端远非易事,需要大量异步通信、并发问题等。编写一个支持每个用户各自运行的线程的实现非常容易,但要扩展到数千个用户则需要更加深思熟虑的方法。

5
我注意到最后一个答案是在2009年提供的。哦,我记得那些日子。但是自那以后发生了很多好事情; 所以我会补充这个信息,让人们知道要寻找什么。HTTP 1.0提供了一个“保持活动”请求属性,这意味着连接应该保持以进行进一步的请求。在HTTP 1.1中,这成为默认设置。如果您不想重用连接(并且如果您想表现得友好),则实际上必须选择退出。

“WebSockets”的新标准实际上提供了全双工持久连接。 WebSockets在流行浏览器的所有最新版本中都受支持,甚至可以在MSIE中使用它们,如果您安装Google Chrome Framework,这意味着Google软件实际上正在执行工作。 Microsoft表示IE在第10版中支持它,但我自己没有尝试过。然后您需要连接到类似 http://highlevellogic.blogspot.se/2011/09/websocket-server-demonstration_26.html 这样的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接