SignalR,有限的唯一连接(打开的选项卡)IIS 8,Windows 8

Posted

技术标签:

【中文标题】SignalR,有限的唯一连接(打开的选项卡)IIS 8,Windows 8【英文标题】:SignalR, Limited unique connections (opened tabs) IIS8, Windows8 【发布时间】:2012-10-23 11:05:19 【问题描述】:

无法使用 SignalR,当打开多个标签页并为每个标签页分配唯一 ID 时(请参阅。When SignalR made 8-10 connections at a time live chat doesn't work)。

但是。我在此 *** 问题中描述了一种解决方法。这个想法是按顺序覆盖connectionid,每个打开的选项卡都将具有相同的连接ID:因此,从逻辑上讲,在我的特定情况下,没有理由为每个选项卡设置唯一的ID,因为每个选项卡都由一个MyApplicationUserId打开.

无论如何,在 *** 中已经注意到(参见 SignalR How is a duplicate Connection Id handled? ),connectionid 必须是唯一的。他们说,IConnectionIdGenerator 将在即将发布的版本中删除。

所以,这是一条死胡同。我必须使用唯一的 ID,但不能在打开多个浏览器选项卡的情况下使用 SignalR。

谢谢。 德米特里。

【问题讨论】:

【参考方案1】:

正如您在 here 中打开的 SignalR 问题中所讨论的,大多数现代浏览器都会限制到同一站点的最大并发连接数(通常约为 6 个)。

一种解决方法是使用子域,即每个选项卡连接到不同的子域(这是 Facebook 使用的方法)。另一种选择是仅启动一个连接并使用 localStorage 作为选项卡之间的消息总线,正如 FreshCode 在此问题中所建议的那样:SignalR and Browser Connection limit

【讨论】:

嗯.. 我在 IIS8 中创建了重复的子域,因此我有:im.domain.com,im2.domain.com。我从 im 和 im2 子域加载脚本,并打开与它们的连接,以这样的方式混合,即打开 4 个 chrome 选项卡与从 im 加载的脚本,以及 4 个选项卡与来自 im2 的脚本。和 connection.url 我以同样的方式设置。但无论如何,我不能让超过 6 个选项卡工作...... :( 有趣,在计算并发连接数时应该分别处理两个子域...您是否尝试过在另一个浏览器中和/或查看网络选项卡以确保它连接到不同的子域? 是的,我使用了 chrome 网络检查工具,3 个选项卡从“im”获取脚本和连接,3 个选项卡从“im2”获取。我会在周末尝试弄清楚。 当我使用我的主机时,它就可以工作了。当我使用本地 IIS8 时,它不会。这意味着我需要正确设置我的子域。现在一切正常。我感觉好多了:) @AlexanderKöplinger,我在母版页上有一个聊天应用程序(所有页面通用),我需要在每个页面上进行连接,那么我怎样才能打开超过 6 个选项卡。任何想法都会有所帮助。【参考方案2】:

要绕过浏览器限制,您可以使用‛localStorage‛ 在窗口之间进行通信,并且只有一个窗口作为连接所有者。在这种情况下,其他窗口使用连接所有者来接收/发送消息。 IWC-SignalR 是这种方法的一种实现。

【讨论】:

【参考方案3】:

是的。 您将为信号 R 连接创建动态子域,因为并发请求 [max = 8] 存在浏览器限制,并且对于不同的浏览器,此并发限制可能会有所不同。

对于动态子域,您需要从主机面板为子域设置 DNS,因此这些动态子域指向您的主域。 例如xyz.com 是您的主域,abc1.xyz.com 是您的子域,abc2.xyz.com 是您的子域,abc3.xyz.com 是您的子域,abc4.xyz.com 是您的子域领域。 这些子域在DNS设置和IIS设置后都指向主域。 这同样适用于聊天应用程序。 祝你好运……

【讨论】:

以上是关于SignalR,有限的唯一连接(打开的选项卡)IIS 8,Windows 8的主要内容,如果未能解决你的问题,请参考以下文章

SignalR 挂起开始连接

无法使用 SignalR 在 safari ipad/iphone 上的同一 Web 应用程序中同时打开 2 个选项卡

Blazor Server 每次使用的连接数受浏览器限制

在本地 IIS 下运行是不是会限制 Signalr 连接的数量

SignalR 在某些限制后未处理请求。即使在相同或不同机器上的其他浏览器中,选项卡仍会加载

使 RID 与 Strophe js 连接的多个选项卡保持同步