我想为每个帐户保留一个“在线”用户列表。
我每隔五秒钟在应用程序中对服务器进行一次轮询,告诉服务器“嘿,此用户当前在线”
然后,我更新所有其他已连接的用户界面,以显示“此用户在线”。
我现在要处理的问题是,一旦服务器没有收到x秒钟的“嘿我在线”通知,我想继续并将它们标记为“脱机”。
我使用的是laravel,并认为事件可能会起作用,也许事件会休眠10秒钟,然后检查用户上次“签入”的时间戳是否大于10秒。但这引发了laravel事件排队的问题?我知道您可以将它们排队,这意味着常规事件只会在同一服务器请求上运行,而无法按预期工作。
如果我对它们进行Q,只有一个侦听器,这是否会使所有“等待”线程试图重置一个微不足道的“在线”布尔值使q变得拥挤?也许有多个听众?
什么是/什么没有发生,让服务器重置DB值x秒数的最简单方法是什么?
Php是同步的,因此任何涉及运行时队列的事情都会让您非常头疼。
我知道laravel 5有一些队列系统(我自己没有使用过),但是您需要创建一些会消耗该队列的东西。
最好的选择是重新阅读laravel中的队列文档,并查看cron作业。
这些是自动任务,您可以将其设置为以设置的间隔运行。然后,他们可以处理任何持久队列并更新您的数据库。
更新:
为什么要保存布尔值?您只需last_seen
在数据库中保存一个时间戳即可。然后,您无需检查布尔值以查看用户是否在线,而只需将last_seen
时间戳与当前时间戳进行比较即可。如果大于x秒,则假定用户处于脱机状态。使用laravel,您甚至可以将此逻辑添加到数据库表的雄辩模型中。这意味着不必在需要的地方重复逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句