我正在尝试使用COMET solution using ASP.NET。
麻烦的是我想在同一页面中实现发送和通知部分。 在IE7上,每当我尝试发送请求时,它就会排队等候。 在互联网和stackoverflow页面上阅读后,我发现每页只能同时执行2个asyn ajax请求。
所以在我关闭我的彗星Ajax请求之前,我的第二个请求没有完成,甚至没有从浏览器中出来。当我用Firefox检查时,我只是一个Ajax彗星请求一直在运行。那么这不会给我留下另外一个ajax请求吗?
该解决方案还使用了IRequiressessionstate for Asynchronous HTTP Handler,我已将其删除。但它仍然会在IE7的多个实例上产生问题。
我有一个工作在这里陈述http://support.microsoft.com/kb/282402
这意味着我们可以默认增加注册表中的请求限制为2
通过更改“ MaxConnectionsPer1_0Server ”键
在配置单元“HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings”
我们可以增加请求数量。
基本上我想使用Comet向连接到服务器的多个客户端广播信息,客户端也可以向服务器发送消息。
广播有效,但发送请求回服务器不起作用。
我正在使用IIS 6和ASP.NET。
是否有更多变通办法或方式来发送更多请求?
参考文献:
How many concurrent AJAX (XmlHttpRequest) requests are allowed in popular browsers?
AJAX, PHP Sessions and simultaneous requests
答案 0 :(得分:5)
您只能使用2个连接,但通常只需要1个即可,即使在IE中也可以1个接收。
那就是说,你可以完全做到这一点;我们一直在WebSync做这件事。解决方案在于子域。
要注意的是IE(和其他浏览器,虽然它们通常限制为6个请求,而不是2个)限制每个域的请求 - 但是这个限制是针对整个域排除子域。例如,您可以向“www.stackoverflow.com”打开2个请求,同时向“static.stackoverflow.com”打开另外2个请求。
现在,你必须要小心这种方法,因为如果你从www子域向静态子域发出请求,那么这被认为是跨域请求,所以你立即被限制为不使用直接XHR呼叫,但此时您已绕过2连接限制; JSONP,HTML5等都是您绕过跨域限制的朋友。
修改强>
使用>进行管理1个IE实例回到了同样的问题。该限制适用于所有实例。因此,如果您打开了两个浏览器,并且它们都使用了彗星,那么您将无法打开2个长轮询连接。如果您已经最大化了选项,那么您将把这些长轮询请求连接到类似“comet.mysite.com”的内容,并且您的非长轮询请求将转到“mysite.com”。如果不进入通配符DNS,那将是最好的。
查看我们的一些WebSync Demos;他们在2个IE实例中工作没有问题。如果您查看源,您将看到流连接的DNS与主页不同;我们使用JSONP来绕过跨域限制。
答案 1 :(得分:2)
COMET的主要思想是保持一个客户端到服务器的请求打开,直到需要响应。
如果您正确设计了代码,那么您不需要同时打开2个以上的请求。以下是它的工作原理:
关键是集中和异步客户端中的所有通信。所以你永远不需要有2个开放请求。
但要直接回答您的问题,不,没有其他解决方法。
提高连接限制或减少使用的连接数。