如何有效地检测客户端是否脱机服务器端

Tom*_*per 0 google-app-engine android offline server-side server

对于我的Android应用程序,我正在寻找一种检测客户端连接状态的优雅方式.服务器需要知道客户端是在线还是离线.

我读过这个答案,

...服务器应该在一段时间间隔后发送ping到设备,设备应该回复.如果设备未回复,则表示用户处于离线状态...

但我觉得持续的ping是蹩脚的,而且客户端和服务器端的资源都相当沉重.是否有更优雅,最好是事件驱动的方法来检测客户端是否处于脱机状态?

虽然我的情况适用于Android中的Android和Google App Engine,但我计划扩展到Web和ios客户端,因此首选依赖解决方案的平台.

更新: 同样的答案也提到套接字连接:

...基本上你需要创建与服务器的套接字连接并交换ping

据我所知,与服务器保持套接字连接总是适合多人游戏,但它是否适合永远开启,但只是偶尔发送/接收服务等数据?

小智 5

不幸的是,ping方法是最好的.您提出的事件驱动的解决方案乍一看似乎很优雅,但是,当进一步理论化时,它会引发一些问题.例如,假设你的客户突然失去他所有的击球手,他的手机突然死了.因此,客户端无法向您的服务器发送他不再在线的请求.同时,在服务器端,他仍然被标记为"在线".

ping机制通过提出一个前提来解决这个问题,即"如果没有及时收到ping - >将用户标记为离线".

祝好运!