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 在 safari ipad/iphone 上的同一 Web 应用程序中同时打开 2 个选项卡
在本地 IIS 下运行是不是会限制 Signalr 连接的数量