对于我的Android应用程序,我正在寻找一种检测客户端连接状态的优雅方法。服务器需要知道客户端是在线还是离线。
我已阅读此answer,
...服务器应该在一些之后发送ping 设备和设备的时间间隔应该回复。如果设备不是 回复这意味着用户离线...
但我觉得持续的ping是蹩脚的,而且客户端和服务器端的资源都很重。 是否有更优雅,最好是事件驱动的方法来检测客户端是否处于离线状态?
虽然我的情况适用于Android中的Android和Google App Engine,但我计划扩展到Web和ios客户端,因此首选依赖解决方案的平台。
更新 同样的答案也提到套接字连接:
...基本上你需要与服务器创建套接字连接并交换ping
据我所知,与服务器保持套接字连接总是适合多人游戏,但它是否适合永远开启,但只是偶尔发送/接收数据,如服务?
答案 0 :(得分:5)
不幸的是,ping方法是最好的。您提出的事件驱动的解决方案乍一看似乎很优雅,但是,当进一步理论化时,它会引发一些问题。 例如,假设你的客户突然失去他所有的击球手,他的手机突然死了。因此,客户端无法向您的服务器发送他不再在线的请求。同时,在服务器端,他仍被标记为" online"。
ping机制通过提出一个前提来缓解这个问题,即"如果没有及时收到ping - >将用户标记为离线"。
祝你好运!