【问题标题】:Detect WebSocket connection closed检测 WebSocket 连接关闭
【发布时间】:2016-05-15 23:31:45
【问题描述】:

我正在使用 node.js 和 WebSocket-Node 构建一个简单的聊天 websocket 服务器。

客户端是一个安卓应用。

服务器必须通过两种方式与客户端通信:

  • 客户端连接时的websocket消息(应用程序在前台打开)
  • 使用 Google GCM 推送通知

但是有一个小问题我需要弄清楚..

当客户端连接到服务器并且互联网连接断开时,服务器不会收到通知,因为客户端没有发送关闭帧。所以大约 10 秒钟,服务器认为连接仍然存在.

如果在这 10 秒内服务器通过套接字发送消息.. 消息永远无法到达客户端。

我需要检测连接何时关闭,或者在连接关闭时使用 GCM 发送消息的其他方式。

有办法吗?

【问题讨论】:

标签: android node.js websocket


【解决方案1】:

从服务器端看,不干净的断开连接(没有发送断开连接消息)与非常慢的连接没有区别。

你需要做的是有某种心跳。 WebSockets 对此有协议级别的 ping。如果您的库公开了这一点,则将 ping 设置为您愿意接受的延迟,并添加一个处理程序,以便在超时后失败/未完成。

【讨论】:

  • 感谢您的回答,但我无法每秒 ping 一次设备来检查连接,它会耗尽电池。
  • 很遗憾,如果没有传输任何数据,就无法检测到断开连接。
【解决方案2】:

回答我自己的问题,因为:这是不可能的,我找到了另一种更好的方法来处理我的具体情况

  • 当服务端向客户端发送消息时,客户端回复服务端,让服务端知道消息已经传递给客户端。
  • 如果服务器在超时后没有收到客户端的响应,则认为连接已关闭。
  • 继续通过 GCM 发送消息(或存储它以在客户端重新连接时再次发送)。

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2018-11-26
    • 1970-01-01
    • 2019-10-22
    • 2012-08-08
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多