检测WebSocket连接已关闭

时间:2016-02-05 21:03:54

标签: android node.js websocket

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

客户端是Android应用。

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

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

但是我需要解决一些问题..

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

如果在10秒内服务器通过套接字发送消息,则消息永远不会到达客户端。

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

有办法吗?

2 个答案:

答案 0 :(得分:1)

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

你需要做的是有某种心跳。 WebSockets在协议级别上有ping。如果你的库暴露了这个,那么将ping设置为你愿意接受的延迟,并在失败后添加一个处理程序/在超时后没有完成。

答案 1 :(得分:1)

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

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