2009-11-08 112 views
3

有没有办法让JavaScript连接保持HTTP连接?如何保持HTTP连接活着?

+0

你究竟是什么意思?你想模拟服务器推送? – Myles 2009-11-08 22:39:32

+0

最好告诉我们你到底想要解决什么问题。 – spender 2009-11-08 22:43:54

+0

保持连接处于活动状态以获得更快的响应。我听说这种技术被用在浏览器游戏中,几乎有实时行为。 – powtac 2009-11-08 22:44:12

回答

7

简而言之,我认为JavaScript中长寿命http连接的概念实际上是围绕COMET的一种通信方式。这可以通过几种不同的方式来实现,但本质上涉及客户端(使用XmlHttp权力)立即从服务器请求数据,并且服务器拒绝响应,直到某个事件触发为止。一旦收到这个响应,客户立即发出另一个请求(这将再次挂起在服务器端,直到需要发送)。这模拟服务器推送,但实际上只不过是以聪明的方式使用的延迟响应。在最坏的情况下,可能会有相当高的延迟(即2条消息需要发送,所以周期必须重复两次,所有成本都涉及),但通常情况下,如果消息传输率较低,时间推移。

为这种通信实现服务器端不是微不足道的,并且需要大量的异步通信,并发问题等。编写一个可以在自己的线程上支持几百个用户的实现是相当容易的,但要扩展到数千个需要更多考虑的方法。

+0

感谢您的解释! – powtac 2009-11-08 22:53:56

+0

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push – powtac 2009-11-08 23:02:22

+0

http://ajaxian.com/index.php?s=comet – powtac 2009-11-09 01:10:18

5

我注意到最后的答案是在2009年给出的。哦,我怎么记得那些日子。但自那时以来发生了很多好事,所以我会添加这个只是为了让人们知道要寻找什么。 HTTP 1.0提供了一个“保持活动”请求属性,这意味着连接应该为进一步的请求而维护。在HTTP 1.1中,这成为默认值。如果你不想重复使用连接(如果你想要更好的话),你实际上必须选择退出。

“WebSockets”的新标准实际上为您提供了全双工持久连接。所有最新版本的流行浏览器都支持WebSockets,如果您安装Google Chrome Framework(即Google软件实际上在做这项工作),您甚至可以在MSIE中使用它们。微软表示IE在第10版中支持它,但我自己并没有尝试过。然后你需要的是连接到的东西,如http://highlevellogic.blogspot.se/2011/09/websocket-server-demonstration_26.html