正在使用SignalR等待ASP.NET中的可用套接字

本文关键字:套接字 NET 等待 SignalR ASP | 更新日期: 2023-09-27 18:20:42

我使用SignalR在asp.net中实现聊天,但当我打开web应用程序的多个选项卡时,我会得到"等待可用套接字…"

我已经实现了性能调节SignalR上指定的所有设置,但我的问题并没有因此得到解决。

如何解决此问题?

正在使用SignalR等待ASP.NET中的可用套接字

如注释所示,您达到了浏览器强制执行的每个主机名的连接限制。

你的基本选择是

  • 在UI中具有选项卡的单页应用程序,因此用户不必使用浏览器选项卡
  • 以某种方式共享连接,例如本问题中所讨论的
  • 独立子域

您可以实现一种锁定机制,该机制允许每个多个选项卡只有一个连接。

  1. 将此锁的值存储在本地存储中
  2. 在打开新连接之前将其设置为true,在关闭连接之前释放它(设置为false)(您可能需要对window.beforeunload事件做出反应)
  3. 创建一个计时器,定期检查该锁的值。(您需要这样做,因为用户可以关闭活动连接所在的选项卡)只有当该锁的值为false时才打开新连接
  4. 将接收到的消息从主动选项卡广播给其他选项卡(被动选项卡)。将消息值存储在本地存储中,而其他选项卡会定期检查是否有新值。被动选项卡应存储上次恢复消息的时间戳,并且只查找比该时间戳更新的消息

此解决方案将帮助您处理最大并行连接限制。

本地存储解决方案在这个小项目中实现:

https://github.com/slimjack/IWC-SignalR

我在我的应用程序中尝试过它,可以强烈推荐它,因为它对我有效。我在chrome、firefox和IE上测试过它,对性能很满意。

请记住,您应该在引用<script src="signalr/hubs"></script>之前包含iwc-all.min.js、iwc-signaler.jssignaler-patch.js

它可以很好地与jQuery 1.7或更高版本配合使用。通过一些小的改动,我可以用1.6.4版本运行它。

在解决了这个问题之后,我通过使用子域概念解决了这一问题。为此,我创建了多个指向主站点的子域,每次我指定不同域的集线器url时,我都可以从每个域打开大约5个选项卡。这个技巧对我来说很有效。