Nat*_*han 5 websocket signalr asp.net-mvc-5
我已经在SignalR中编写了一个相当简单的聊天应用程序。
看来,如果我使用2个以上的选项卡/浏览器/设备进行连接,则第三个将挂起并且永远不会连接,最终会导致问题。
为什么只能与2个用户连接?
一旦我断开另一个连接中的一个,第三个请求就会通过。
我使用的是同一用户还是不同的用户都没关系。
我在Windows 10,带有SignalR 2.2的Asp.Net MVC5上使用IIS
它从不调用中心代码,如果在打开该选项卡时尝试与第四个客户端连接,则第四个选项卡甚至都不会返回视图。

$.connection.hub.start().done(function () {
//add all existing messages when we start the connection
//chat.server.addExistingMessages();
console.log('Now connected, connection ID=' + $.connection.hub.id);
Run Code Online (Sandbox Code Playgroud)
第三个连接从未命中console.log。
$.connection.hub.start()
Run Code Online (Sandbox Code Playgroud)
被命中,并且连接和集线器的值都不为空。
public override Task OnConnected()
{
Run Code Online (Sandbox Code Playgroud)
除非我终止其他两个连接中的一个,否则永远不会打在第三个连接上。因此,共享这些方法/函数的内部结构只会增加我的困惑。
$.connection.hub.starting(function () {
console.log('starting')
});
$.connection.hub.received(function () {
console.log('connection received')
});
Run Code Online (Sandbox Code Playgroud)
在第三个客户端上,没有开始将其放入控制台,但是没有收到。
我相信,在经历了很多拔毛和挫折之后,我能够找到这个问题的答案。
因为桌面 IIS 只允许 10 个并发连接,而且 websocket 连接非常动态,所以我认为它充当了 10 个连接,而只有 2 个实际连接。 http://www.asp.net/signalr/overview/getting-started/supported-platforms
“不应使用 IIS 或 Cassini 的完整版本,因为同时存在 10 个连接的限制,该限制很快就会达到,因为连接是暂时的、经常重新建立,并且在不再使用时不会立即处理. IIS Express 应该在客户端操作系统上使用。”
如果情况并非如此,请有人纠正我!
作为解决方案,我将使用 IIS Express,我不想这样做的原因是因为我希望公开我的网站,以便我的同事可以连接并进行健全性测试。我弄清楚了如何将 IIS 公开到网络并从命令提示符运行它,以便我可以在服务器启动时进行开发。 这是将 IIS Express Go 公开到 c:\Users[YourName]\Documents\IISExpress\config\applicationhost.config 的方法
添加(适当替换IP地址和端口):
<binding protocol="http" bindingInformation="*:58938:192.168.1.42" />
Run Code Online (Sandbox Code Playgroud)
到相关网站。
打开命令提示符。
您不需要管理员用户权限即可运行本演练中的命令。但是,如果要在编号为 1024 或更少的端口上运行 IIS Express,则必须具有管理员用户权限。运行以下命令导航到 IIS Express 安装文件夹:
cd \Program Files\IIS Express
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是 64 位操作系统,请运行以下命令: cd \Program Files (x86)\IIS Express 运行以下命令以查看 IIS Express 使用字符串:
iisexpress /site:site-name
Run Code Online (Sandbox Code Playgroud)
当然,不要忘记端口转发和防火墙通过。
| 归档时间: |
|
| 查看次数: |
1391 次 |
| 最近记录: |