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

Posted

技术标签:

【中文标题】SignalR 在某些限制后未处理请求。即使在相同或不同机器上的其他浏览器中,选项卡仍会加载【英文标题】:SignalR not handling requests after some limit.Tabs remains loading even to other browser on same or different machine 【发布时间】:2019-07-23 09:36:00 【问题描述】:

当 SignalR 实现域的浏览器上的选项卡数量增加时。在一些选项卡限制后,选项卡仍然旋转。

从一些研究说这是浏览器的限制。链接是:

https://medium.com/yasser-shaikh/multiple-tab-issue-with-signal-r-9df76c1ffba0 https://github.com/SignalR/SignalR/issues/2744 https://github.com/SignalR/SignalR/issues/849 SignalR, Limited unique connections (opened tabs) IIS8, Windows8

但是当我尝试从不同的机器或不同的浏览器浏览来自同一域的任何 url 时,选项卡也在它们上旋转。一旦我关闭了第一个浏览器的一些选项卡,其他机器选项卡就会开始工作。

请帮忙

谢谢

【问题讨论】:

【参考方案1】:

您分享的链接已经描述了问题并提供了答案。

例如“使用本地存储作为选项卡之间的消息总线”。这应该可以解决问题。为此,如果您想减少工作量,您可以从此处使用 IWC-SignalR 库:https://github.com/slimjack/IWC-SignalR。 示例代码如下:

var echoHub = SJ.iwc.SignalR.getHubProxy('echo', 
    client: 
        displayMsg: function (msg) 
          console.log(msg);
        
    
);
SJ.iwc.SignalR.start().done(function () 
    console.log('started');
    echoHub.server.send('test').done(function () 
        console.log('sent');
    );
);

这里集线器Echo 使用在服务器上定义的方法Send。方法 Send 调用所有客户端的方法displayMsg

那么这里是displayMsg方法:

var echoHub = SJ.iwc.SignalR.getHubProxy('echo', 
    client: 
        displayMsg: function (msg) 
          console.log(msg);
        
    
);

echoHub.server.send('test');

完整的实现和描述可在上述链接中找到。

【讨论】:

是的,我已经探索了您提到的解决方案。并且也应用了它。现在我可以在我的机器上打开多个标签。但是,当我在我的上加载多个标签时。它将阻止其他机器上的所有其他用户。在我关闭我的标签之前,他们将只能浏览这些 URL。【参考方案2】:

是的,我已经探索了您提到的解决方案。并且也应用了它。现在我可以在我的机器上打开多个标签。但是,当我在我的上加载多个标签时。它将阻止其他机器上的所有其他用户。在我关闭我的标签之前,他们将只能浏览 URL。当被任何用户浏览器阻止时,它正在阻止阻止服务器

【讨论】:

以上是关于SignalR 在某些限制后未处理请求。即使在相同或不同机器上的其他浏览器中,选项卡仍会加载的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 SignalR 在所有客户端上触发 AJAX 请求吗?

SignalR:协商请求期间出错:未定义

.Net SignalR 在还配置了 Cookie 身份验证时使用 JWT 承载身份验证

Windows 10 Home/Pro/Enterprise 上的 IIS 并发请求限制

使用相同的处理程序去处理 websockets 和 HTTP

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