正在使用SignalR等待ASP.NET中的可用套接字
本文关键字:套接字 NET 等待 SignalR ASP | 更新日期: 2023-09-27 18:20:42
我使用SignalR在asp.net中实现聊天,但当我打开web应用程序的多个选项卡时,我会得到"等待可用套接字…"。
我已经实现了性能调节SignalR上指定的所有设置,但我的问题并没有因此得到解决。
如何解决此问题?
如注释所示,您达到了浏览器强制执行的每个主机名的连接限制。
你的基本选择是
- 在UI中具有选项卡的单页应用程序,因此用户不必使用浏览器选项卡
- 以某种方式共享连接,例如本问题中所讨论的
- 独立子域
您可以实现一种锁定机制,该机制允许每个多个选项卡只有一个连接。
- 将此锁的值存储在本地存储中
- 在打开新连接之前将其设置为true,在关闭连接之前释放它(设置为false)(您可能需要对window.beforeunload事件做出反应)
- 创建一个计时器,定期检查该锁的值。(您需要这样做,因为用户可以关闭活动连接所在的选项卡)只有当该锁的值为false时才打开新连接
- 将接收到的消息从主动选项卡广播给其他选项卡(被动选项卡)。将消息值存储在本地存储中,而其他选项卡会定期检查是否有新值。被动选项卡应存储上次恢复消息的时间戳,并且只查找比该时间戳更新的消息
此解决方案将帮助您处理最大并行连接限制。
本地存储解决方案在这个小项目中实现:
https://github.com/slimjack/IWC-SignalR
我在我的应用程序中尝试过它,可以强烈推荐它,因为它对我有效。我在chrome、firefox和IE上测试过它,对性能很满意。
请记住,您应该在引用<script src="signalr/hubs"></script>
之前包含iwc-all.min.js、iwc-signaler.js和signaler-patch.js。
它可以很好地与jQuery 1.7或更高版本配合使用。通过一些小的改动,我可以用1.6.4版本运行它。
在解决了这个问题之后,我通过使用子域概念解决了这一问题。为此,我创建了多个指向主站点的子域,每次我指定不同域的集线器url时,我都可以从每个域打开大约5个选项卡。这个技巧对我来说很有效。