【发布时间】:2019-07-07 15:15:38
【问题描述】:
我在服务器端使用 Spring WebSocket,在客户端使用 ng-websocket。所以我使用这个WebSocket从客户端发送一个ping,服务器用pong响应。除非我断开网络,否则一切正常。所以我现在面临的问题是,特别是在 Windows 机器上。因此,当网络断开连接时,websocket 不要重新连接并且连接会关闭。但是当我在 Linux 机器上做同样的事情时,它会重新连接并且工作正常,但在 Windows 上,10 秒后它会断开连接,并且我在客户端关闭了 Web 套接字。所以我需要知道 Windows 上的 WebSocket 超时是否需要任何配置。
提前致谢。
【问题讨论】:
-
一些操作系统会在网络断开连接时取消所有连接状态,以帮助应用程序检测断开连接并释放资源。如果没有此功能,您在技术上可以继续写入套接字,直到缓冲区填满。我猜您使用的是 Windows 桌面而不是 Windows Server。
-
是的,我使用的是 windows 桌面而不是 windows 服务器,我应该为 windows 寻找一些配置,以便它不会将其状态更改为关闭。我检查了 Linux 和 Windows 上的 WebSocket 状态,它显示 Linux 的打开(1)但 Windows 的关闭(3)。 WebSocket 状态来自-developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState
-
Linux 最终会关闭套接字。最值得注意的是,当 Windows 返回一个 RST 数据包时,说明它在 Windows 上已关闭。我不得不花一整天的时间安装 Windows Server,但根据我的历史,Win Server 和 Win Desktop 的行为可能非常不同。您需要做的就是关闭连接并在您的 ping-pong 超时时打开一个新连接。
标签: java angularjs spring multithreading websocket