8

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

除了手动向客户端发送消息并寻找响应之外,还有其他方法可以确定客户端已断开网络吗?我缺少一些 IIS 配置吗?谢谢。

4

2 回答 2

15

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

cd \Windows\System32\inetsrv
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>
于 2013-11-11T19:11:18.070 回答
0

这就是 TCP:当你不发送或接收时,你怎么知道对端是还在还是不在?

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

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

于 2013-10-21T20:55:32.177 回答