Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测WebSocket连接是否关闭_Android_Node.js_Websocket - Fatal编程技术网

Android 检测WebSocket连接是否关闭

Android 检测WebSocket连接是否关闭,android,node.js,websocket,Android,Node.js,Websocket,我正在使用node.js和构建一个简单的聊天websocket服务器 客户端是一个Android应用程序 服务器必须以两种方式与客户端通信: 连接客户端时的websocket消息(应用程序在前台打开) 使用Google GCM else推送通知 但是有一个小问题我需要解决 当客户端连接到服务器且internet连接断开时,不会通知服务器,因为客户端未发送结束帧。。因此,在大约10秒钟内,服务器认为该连接仍然存在 如果在这10秒内,服务器通过套接字发送消息。。消息永远无法到达客户端 我需要检测

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

客户端是一个Android应用程序

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

  • 连接客户端时的websocket消息(应用程序在前台打开)
  • 使用Google GCM else推送通知
但是有一个小问题我需要解决

当客户端连接到服务器且internet连接断开时,不会通知服务器,因为客户端未发送结束帧。。因此,在大约10秒钟内,服务器认为该连接仍然存在

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

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


有办法吗?

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


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

从服务器端看,无法区分不干净的断开连接(未发送断开连接消息)和非常慢的连接


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

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

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

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

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

      谢谢您的回答,但我无法每秒ping设备检查连接,它会耗尽电池电量。不幸的是,如果没有任何数据传输,就无法检测到断开连接。谢谢您的回答,但我无法每秒ping设备检查连接,它会耗尽电池电量。不幸的是,如果没有任何数据传输,就无法检测到断开连接。