4

我们在验收测试中广泛使用 Watin,现在在将 SignalR 引入我们的网页时开始遇到问题。我们正在为“Button.Click”和“WebBrowser.GoTo”之类的东西超时,这些功能以前很完美。我们从 Watin 收到“Internet Explorer 忙时超时”异常,我猜这是因为 SignalR 正在从客户端轮询(当 WebSocket 到达时这可能会更好地工作)。有谁知道这个的解决方法?

4

1 回答 1

4

我不是 SignalR 方面的专家,但我为一家生产名为WebSync的商业实施的公司工作。

我最初的怀疑是你可能达到了 IE 的并发请求限制。

首先,相同的测试在 Firefox 中是否可以正常工作,但在 IE 中不行?(IE 通常比其他并发请求的浏览器差)。还有什么版本的IE正在测试?不同代的浏览器的并发请求限制是不同的。查看这篇记录 IE 并发请求限制的文章。在 IE 中,此限制甚至会影响在不同窗口中打开的同一页面的多个副本。但这取决于 IE 的版本,随着时间的推移,微软一直在稳步改进。

在某些情况下,IE 将运行每个域只有 2 个并发请求!在浏览器中打开开发人员工具并监控正在进行的活动 HttpRequest 可能是值得的。您将看到 SignalR 的长轮询请求,但请查看它们是否是任何其他频繁的 AJAX 活动,可能会阻塞第二个可用请求槽。(也许其他与 SignalR 完全无关的东西也在发出 AJAX 请求?或者可能是一个加载缓慢的资源,如臃肿的 CSS 或 JS 文件?)

对于 WebSync,我们通过将 websync 移动到像“stream.mydomain.com”这样的子域来解决这个问题。现在您的页面资源仍在“www.mydomain.com”上,因此即使在最坏的情况下,IE 也可以有 2 个并发请求到“www”。和 2 个并发请求“流式传输”。如果您的网站非常庞大,我们甚至可以使用“a.stream.mydomain.com”、“b.stream.mydomain.com”、....“z.stream.mydomain.com”进一步划分子域如果最终用户可能在多个浏览器窗口(每个窗口指向同一个域)中打开页面,这可以进一步缓解问题。

如果您无法移动长轮询连接,有些人会将图像、样式表和 javascript 等其他内容移动到单独的域(如“static.mydomain.com”),以便这些请求转到其他地方。

于 2013-02-02T00:41:56.857 回答