当打开多个标签时,不可能使用SignalR,并为每个标签分配唯一ID(请参阅。When SignalR made 8-10 connections at a time live chat doesn't work)。
但是。我在此stackoverflow问题中描述了一种解决方法。我们的想法是按顺序覆盖connectionid,每个打开的选项卡都有相同的连接ID:因此,逻辑上,在我的特定情况下,没有理由为每个选项卡都有唯一的ID,因为每个选项卡由一个MyApplicationUserId打开
无论如何,在stackoverflow(参见SignalR How is a duplicate Connection Id handled?)中已经注意到,connectionid必须是唯一的。他们说,IConnectionIdGenerator将在升级版中删除。
所以,这是一条死胡同。我必须使用唯一的ID,但我不能使用SignalR打开几个浏览器标签。
谢谢。 梅德。
答案 0 :(得分:11)
正如您已经打开here的SignalR问题所讨论的那样,大多数现代浏览器都限制了同一网站的最大并发连接数(通常约为6)。
一种解决方法是使用子域,即每个选项卡连接到不同的子域(这是Facebook正在使用的方法)。另一种选择是只启动一个连接并使用localStorage
作为FreshCode在此问题中建议的选项卡之间的消息总线:SignalR and Browser Connection limit
答案 1 :(得分:1)
要绕过浏览器限制,您可以使用“localStorage”在窗口之间进行通信,并且只有一个窗口作为连接所有者。在这种情况下,其他窗口使用连接所有者来接收/发送消息。 IWC-SignalR是这种方法的实现。
答案 2 :(得分:0)
是肯定的。 您将为信号R连接创建动态子域,因为并发请求[max = 8]存在浏览器限制,对于不同的浏览器,此并发限制可能会有所不同。
对于动态子域,您需要从主机面板为子域设置DNS,因此这些动态子域指向您的主域。 例如xyz.com是您的主域名,abc1.xyz.com是您的子域名,abc2.xyz.com是您的子域名,abc3.xyz.com是您的子域名,abc4.xyz.com是您的子域名域。 在DNS设置和IIS设置之后,这些所有子域都指向主域。 这种方式适用于聊天应用程序。 祝你好运......