代码之家  ›  专栏  ›  技术社区  ›  Amitd

comet和同时ajax请求

  •  2
  • Amitd  · 技术社区  · 16 年前

    我想用一个 COMET solution using ASP.NET .

    问题是我想在同一个页面中实现发送和通知部分。 在IE7上,每当我试图发送请求时,它就会排队。 在阅读了internet和stackoverflow页面后,我发现每页只能同时执行两个asyn ajax请求。

    所以在我关闭comet ajax请求之前,我的第二个请求不会完成,甚至不会从浏览器中退出。当我用firefox检查时,我只有一个ajax comet请求一直在运行,所以这不就给我留下了一个ajax请求吗?

    此外,该解决方案还将irequiresessionstate用于我已删除的异步http处理程序。但它仍然会在IE7的多个实例上产生问题。

    我有一个工作是在这里说的 http://support.microsoft.com/kb/282402
    这意味着我们可以增加注册表的请求限制,默认为2。
    通过改变” maxconnectionsper1_0服务器 “钥匙
    在配置单元“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

    jquery .ajax request blocked by long running .ajax request

    jQuery: Making simultaneous ajax requests, is it possible?

    2 回复  |  直到 9 年前
        1
  •  5
  •   Jerod Venema    16 年前

    你只能有两个连接,但通常你只需要一个发送,一个接收,甚至在IE中。

    也就是说,你完全可以这么做,我们一直在做 WebSync . 解决办法在于子域。

    需要注意的是,ie(和其他浏览器,虽然它们通常限制为6个请求,而不是2个)限制每个域的请求,但是这个限制是针对整个域的 排除子域 . 例如,可以同时有两个请求打开到“www.stackoverflow.com”,还有两个请求打开到“static.stackoverflow.com”。

    现在,您必须对这种方法稍微小心一点,因为如果您从www子域向静态子域发出请求,这将被视为跨域请求,因此您立即被限制为不使用直接的xhr调用,但在这一点上,您仍然绕过了2 conn部分限制;jsonp、html5等,都是你绕过跨域限制的朋友。

    编辑

    使用>1个IE实例进行管理也会遇到同样的问题。此限制适用于所有实例。所以,如果您打开了两个浏览器,并且它们都使用comet,那么您将不得不打开两个长的轮询连接。如果你已经最大化了你的选项,你将把那些长的轮询请求连接到“comet.mysite.com”之类的东西,而你的非长的轮询请求将转到“mysite.com”。这是最好的,你将得到不进入通配符dns。

    看看我们的 WebSync Demos ;它们在两个ie实例中工作,没有问题。如果您查看源代码,您将看到流连接的dns与主页不同;我们使用jsonp绕过跨域限制。

        2
  •  2
  •   Cheeso    16 年前

    comet的主要思想是保持一个客户机到服务器的请求打开,直到需要响应为止。

    如果您正确地设计了代码,那么您不需要同时打开超过2个请求。其工作原理如下:

    • 客户端使用中心消息发送-接收循环向服务器发送请求
    • 服务器接收请求并保持打开状态。
    • 在某个时刻,服务器响应客户端。
    • 客户端(浏览器)接收响应,并在其中心消息循环中对其进行处理。
    • 客户机立即发出另一个请求。
    • 重复

    关键是集中化和异步化客户端中的所有通信。所以你永远不需要有两个打开的请求。

    但要直接回答你的问题, 不,没有其他的解决办法。

    提高连接限制或减少使用的连接数。

    推荐文章