WebSocket客户端的状态不会因网络丢失而改变

Ala*_*lan 7 .net c# asp.net websocket

使用Microsoft.Web.WebSockets.WebSocketHandler使用WebSocket服务器,我将连接的客户端保留在WebSocketCollection中.当客户端丢失其网络连接时,在服务器上不会调用OnClose和OnError方法.此外,查看集合中的特定客户端会显示其WebSocket.State仍被描述为已连接.这是在IIS8上.

如果没有手动向客户端发送消息并寻找响应,是否有另一种方法可以确定客户端已丢弃网络?我缺少一些IIS配置吗?谢谢.

Ala*_*lan 15

我能够通过两个步骤解决我的问题.首先,我在提示符下运行以下命令来编辑IIS配置.

cd \Windows\System32\inetsrv
appcmd unlock config /section:system.webServer/websocket
Run Code Online (Sandbox Code Playgroud)

然后我用以下内容更新了我的Web.config.

<system.webServer>
    <webSocket enabled="true" pingInterval="00:00:05" />
<system.webServer />
Run Code Online (Sandbox Code Playgroud)


obe*_*tet 0

这就是 TCP:当你不发送或接收时,你如何知道对等点是否仍然存在或已经消失?

如果您终止对等进程或重新启动其计算机,则该对等方的操作系统网络堆栈通常会主动关闭 TCP,因此您也会立即检测到丢失的 WebSocket 检测。但是,如果您只是拔掉对等方(电源或网络)的插头或发生其他严重情况,则 TCP 不会主动关闭。

在 WebSocket 的上下文中,您可以执行 WebSocket 级别的 ping/pong(不知道 IIS 是否支持 .. WS ping/pong 心跳),或者您可以通过发送小型 WS 消息来执行应用程序级别的心跳。