【问题标题】:Laravel Manage Online User ListLaravel 管理在线用户列表
【发布时间】:2015-11-25 00:52:22
【问题描述】:

我想为每个帐户保留一份“在线”用户列表。

我在我的应用程序中每五秒轮询一次服务器,告诉它“嘿,这个用户目前在线”

然后我更新所有其他已连接的用户界面以显示“嘿,此用户在线。”

我现在正在处理的问题是,一旦服务器在 x 秒内没有收到“嘿,我在线”通知,我想继续并将它们标记为“离线”。

我正在使用 laravel 并认为事件可能会起作用,也许启动和事件会休眠 10 秒并检查用户上次“签入”的时间戳是否大于 10 秒。但这引发了 Laravel 事件排队的问题?我知道您可以将它们排队,这意味着常规事件只会在同一个服务器请求上运行,而不会按预期工作。

如果我对它们进行 Q 处理,那么只有一个侦听器不会因为所有这些“等待”线程试图重置一个微不足道的“在线”布尔值而使 q 拥塞吗?也许有多个听众?

在某事发生/未发生后,让服务器重置数据库值 x 秒数的最简单方法是什么?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    Php 是同步的,所以任何涉及运行时队列的事情都会让你非常头疼。

    我知道 laravel 5 有一些队列系统(我自己没用过),但是你需要创建一些东西来消耗那个队列。

    最好的办法是重新阅读 laravel 中的队列文档,并查看 cron 作业。

    这些是您可以设置为按设定时间间隔运行的自动化任务。然后他们可以处理任何持久化队列并更新您的数据库。

    更新:

    为什么要保存布尔值?你可以在你的数据库中保存一个时间戳last_seen。然后,您的代码无需检查布尔值以查看用户是否在线,而是只需将last_seen 标记与当前时间戳进行比较。如果大于 x 秒,则假定用户离线。使用 laravel,您甚至可以将此逻辑添加到数据库表的 eloquent 模型中。这意味着不必在任何需要的地方重复逻辑。

    【讨论】:

    • 是的,我正在使用 laravel 4 并使用 AWS 设置了队列,但我质疑是否将它们用于此目的。 Cron 工作可能很有趣。感谢您的反馈。
    • 还有,为什么要设置一个布尔值?你不能有一个时间戳'last_seen',然后将该时间戳与当前时间进行比较吗?
    • 是的,我想我可以在其他用户的前端做到这一点,并避免这种重置垃圾一起,不是我。伙计,有时这项工作会让你觉得很傻。
    猜你喜欢
    • 2017-01-08
    • 2011-02-10
    • 1970-01-01
    • 2021-06-04
    • 2017-07-07
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2019-07-08
    相关资源
    最近更新 更多