Websockets和uwsgi – 检测客户端的断开连接?

我正在使用uwsgi的websockets支持,到目前为止它看起来很棒,服务器检测到客户端何时断开连接以及客户端以及服务器关闭时.但我担心这不适用于所有情况/浏览器.

在其他框架(即sockjs)中,通过发送用作心跳/ ping的常规消息来监视连接.但uwsgi根据websockets规范发送PING / PONG帧(即不是常规消息/控制帧),因此从客户端我无法知道何时从服务器接收到最后一次ping.所以我的问题是:

如果连接被某些代理丢弃或阻止,浏览器将可靠地(即Chrome,IE,Firefox,Opera)检测到没有从服务器收到PING并将连接指示为关闭,或者我应该实现一些额外的ping / pong系统,以便从客户端检测到连接已关闭?

谢谢

最佳答案 你完全正确.客户端无法跟踪或发送ping / pongs.因此,如果连接断开,服务器能够通过ping / pong检测到这种情况,但客户端被挂起……直到它尝试发送内容并且底层TCP机制检测到另一方未确认其数据包.

因此,如果客户端应用程序期望在大多数时间“监听”,那么实现一个“双向”工作的保持活动系统可能会很方便,正如Stephen Clearly在您发布的链接中所解释的那样.但是,这个保持活动的系统将是应用程序层的一部分,而不是传输层的一部分作为ping / pongs.

例如,您可以使用“{token:’whatever’}”消息,服务器和客户端只需延迟5秒即可回复.客户端应该有一个10秒超时的定时器,每次收到消息时都会停止,并在每次回显消息时启动,如果定时器触发,则可以考虑删除连接.

点赞