Microsoft.Web.WebSockets.WebSocketHandler 使用 WebSocket 服务器,我将连接的客户端保存在 WebSocketCollection 中。当客户端失去网络连接时,不会在服务器上调用 OnClose 和 OnError 方法。此外,查看集合中的特定客户端显示其 WebSocket.State 仍被描述为已连接。这是在 IIS8 上。
除了手动向客户端发送消息并查找响应之外,是否有其他方法可以确定客户端已断开网络?我是否缺少一些 IIS 配置?谢谢。
我能够通过两个步骤解决我的问题。首先,我在提示符下运行以下命令来编辑 IIS 配置。
cd WindowsSystem32inetsrv
appcmd unlock config /section:system.webServer/websocket
然后我用以下内容更新了我的 Web.config。
<system.webServer>
<webSocket enabled="true" pingInterval="00:00:05" />
<system.webServer />
对于IIS Express和VS项目,您必须编辑"applicationhost.config"文件并更改overrideModeDefault="Allow"
<configSections>
<sectionGroup name="system.webServer">
...
<section name="webSocket" overrideModeDefault="Allow" />
</sectionGroup>
<configSections>
这是TCP:当你不发送或接收时,你怎么知道对等方是否仍然存在或消失?
如果您终止对等进程或重新启动其计算机,该对等方的操作系统网络堆栈通常会主动关闭 TCP,因此您也会立即检测到丢失的 WebSocket 检测。但是,如果您只是拔掉对等体(电源或网络)上的插头或发生其他严重的事情,则TCP不会主动关闭。
在WebSocket的上下文中,你可以做WebSocket级别的ping/pongs(不知道IIS是否支持)。WS ping/pong 检测信号),或者可以通过发送小型 WS 消息来执行应用级检测信号。