SignalR,有限的唯一连接(打开的选项卡)IIS8,Windows8

时间:2012-10-23 11:05:19

标签: signalr

当打开多个标签时,不可能使用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打开几个浏览器标签。

谢谢。 梅德。

3 个答案:

答案 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设置之后,这些所有子域都指向主域。 这种方式适用于聊天应用程序。 祝你好运......