从服务器检查 Android 设备是不是在线
Posted
技术标签:
【中文标题】从服务器检查 Android 设备是不是在线【英文标题】:Check from the server if Android device is online从服务器检查 Android 设备是否在线 【发布时间】:2013-09-20 21:35:01 【问题描述】:tl;dr 如何从服务器中查明 android 设备在任何给定时间是否在线?
我的应用程序需要始终连接互联网才能进行预订。用户还可以通过网站独立进行预订。
但是,如果 Android 设备上的 Internet 连接中断(边缘情况) - 我仍然希望该设备继续离线运行(并在本地进行预订,离线),而网站将停止接受预订 - 因为 Android 设备不再连接到互联网,可能会发生各种同步错误。
换句话说,Android 设备离线预订比网站预订更有优势。
因此在设备上检索到 Internet 连接后,网站将继续正常运行。
建议的解决方案
我考虑了一些解决方案,其中可能包括从服务器向设备发送推送并在合理的时间段内等待响应(对某个端点的 HTTP 调用)。如果没有回复 - 设备离线,否则在线。还有其他更可靠的建议吗?
【问题讨论】:
首先提出一个更强大的协议并避免“各种同步错误”对您来说不是更好吗? 我该怎么做?要求是用户可以在线(网站)进行预订,操作员可以通过设备(离线或在线)进行预订。用户和运营商都必须知道(在进行实际预订之前)哪些插槽可用/打开。如果设备上没有互联网连接,则很容易要求无法预订 - 但事实并非如此。 “我该怎么做?” ——嗯,通过编程。毕竟,无论如何你都需要这样做。设备频繁地上下线,Web 浏览器也不能幸免于问题。根据您的计划,如果您能够确定设备在时间T
在线,那么您预计整个世界都会停止运行,以确保设备保持在线(并且 Web 浏览器将没有问题)直到所有工作完成时T+X
。这简直是不现实的。如果这意味着需要对您的“要求”进行更改,那就这样吧。
现在,在同步算法方面已经做了很多工作。一种方法是说,在双方都完成工作之前,保留不是完全“真实的”。这往往需要在事务进行时将资源(例如“槽”)置于“待处理”状态,因此在此过程中没有其他人可以偷走这些资源。它通常还涉及某种超时,因此最终会清理废弃的事务,并将资源从“挂起”状态移回“空闲”状态。
【参考方案1】:
除了使用一些在 Android 上运行的代理并通知服务器它已启动之外,别无他法。
其他方式,更复杂的是使用“推送通知”(例如Meteor技术服务器端)。
关于服务器端 cron-job:
在数据库中的所有客户端上运行的独立进程,假设每 1 天,并将每个客户端的最后“活着”消息(请求)与当前时间进行比较。
如果差值等于 1 周,则将客户端状态设置为“僵尸”。
【讨论】:
这种方法的问题是用户可以到达网站并在代理调用之间进行预订(在线 -> 离线)。所以时间线是:设备在线 -> 通知服务器 -> 设备离线 -> 在离线模式下在设备上进行预订 -> 用户在线预订。可能会发生碰撞。 一点也不,为服务器创建策略(一些 cron 作业作为服务),如果客户端没有通知你,比如说,在 1 周内 - 将客户端的数据库更新为僵尸。我确定你在数据库中记录了所有客户端请求的时间戳以上是关于从服务器检查 Android 设备是不是在线的主要内容,如果未能解决你的问题,请参考以下文章