【问题标题】:Aynchronous web server calls in Silverlight and maximum HTTP connectionsSilverlight 中的异步 Web 服务器调用和最大 HTTP 连接数
【发布时间】:2008-10-23 08:53:48
【问题描述】:

我了解到 Silverlight 2.0 在与 Web 服务器通信时通过设计强加了一个异步模型。我还没有机会尝试使用 Silverlight,但我认为它使用线程池来管理线程,就像在 .NET Framework 中一样。

现在,由于某些浏览器,尤其是 Internet Explorer,硬编码限制最多可以在 Web 服务器上建立两个并发 HTTP 连接,如果我从 Silverlight 发出一堆异步请求会发生什么?

Silverlight 是绕过 Web 浏览器中的这一限制并打开与可用线程一样多的 HTTP 连接,还是异步请求排队等待两个连接之一可用?

【问题讨论】:

    标签: silverlight multithreading http browser


    【解决方案1】:

    在 IE 中(尚未测试其他)Silverlight 一次限制为 2 个连接。

    Silverlight 中的行为就是不发出请求。因此,如果您连续发出 5 个异步 Web 服务请求,则前 2 个会发生,其他三个不会。没有抛出我见过的异常​​......

    Fiddler 在这里帮了大忙 :)

    【讨论】:

    • IE和silverlight的版本是多少?
    • 这在 Silverlight 4 中绝对不是真的,它将它们排队(但仍限制为一次 2 个)。
    • ClientHttp和BrowserHttp被选中时的行为是一样的吗?
    【解决方案2】:

    为您的客户创建一个消息管理器界面。任何传出请求都会发布到该管理器处理的队列中。它将串行处理排队的消息(即,当调用发送到服务器的最后一条消息的回调时,可以安全地继续处理下一条排队的消息)。

    您可以通过保持与服务器的 Comet 连接打开来消耗其他连接资源。服务器将通过此 Comet 连接将任何返回消息推送到客户端。您需要使用唯一编号标记传出消息,该编号可以作为传入消息的属性嵌入 - 以便结果可以与请求相关联。消息管理器会将结果消息分派给该结果的适当处理程序。

    基本上,您最终会使用两个连接资源来建立双向消息传递。但是客户端上的请求者数量没有人为的限制(尽管请求将被串行传输到服务器)。不过,发送的动作总是很快的,因为您不需要等待任何结果被计算出来——您只需要将消息可靠地传递到服务器并返回即可。结果在另一个 Comet 连接上异步返回。

    我们将 Flex 客户端应用程序与在我们的 Tomcat Web 服务器中运行的 Adob​​e BlazeDS 结合使用,按照这些思路进行操作:

    A Flex-based asynchronous stack

    【讨论】:

      【解决方案3】:

      除了前面提到的 IE 之外,Firefox 也仅限于两个连接。

      请注意,限制是每个主机名。

      如果您在主机文件中添加条目,或使用 dns 别名,您可以获得更多连接。例如在测试中,在你的 hosts 文件中添加像 '127.0.0.1 test1' 这样的行,然后你可以打开两个到 http://localhost 的连接和两个到 http://test1 的连接

      【讨论】:

        【解决方案4】:

        我猜,作为 .NET 应用程序 Silverlight 2 具有独立于浏览器的限制。
        我会假设它是 Machine.config 中的 maxconnection 属性,如http://support.microsoft.com/kb/828219

        中所述

        【讨论】:

          【解决方案5】:

          首先,Machine.config 文件不会被使用,因为 Silverlight 控件是使用其自己的 CoreCLR 版本进行沙盒化的。

          我相信 Silverlight 控件实际上是利用底层浏览器来发出异步 HTTP 请求。考虑到 Silverlight 控件如何无法访问 SOAP 错误信息,这很可能是这种情况,因为 SOAP 规范要求服务器返回 HTTP 500 响应代码,而 Silverlight 控件无法从托管该控件的浏览器中获取该代码。

          此帖子here 用于确认这一点。

          关于并发HTTP连接数的限制,我相信IE5及更高版本基于HTTP协议版本限制了同一个站点的连接数——HTTP/1.0限制为4个连接,HTTP/1.1限制为3个连接。大多数情况下,Web 服务器会将每个客户端的连接数限制为 2,排队或丢弃剩余的连接数。

          【讨论】:

          • 关闭。旧浏览器限制为 4 个 HTTP/1.0 和 2 个 HTTP/1.1。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 2011-09-03
          • 2012-05-07
          • 1970-01-01
          相关资源
          最近更新 更多