如何获得在线用户(实时)

时间:2019-09-24 07:54:25

标签: laravel

我有一个任务来显示网站上存在的在线用户列表。有人说我应该为此使用网络套接字。 我不知道该怎么实现。我已经安装了Pusher和Laravel Echo。您能指出正确的方向来帮助我吗?我想我应该听用户套接字连接的那一刻。

1 个答案:

答案 0 :(得分:2)

阅读所有评论后,我想到了两种可能的解决方案:

用户登录/注销时广播

这是非常简单的解决方案。您可以使用laravel notifications来实现特定的广播逻辑:

  • 在登录/注销阶段,创建一个UserLogged[In|Out]通知并将其广播到特定频道
  • 使用Laravel Echo和少量的javascript,更新您的onlineUsers列表(例如,在VueJs中,您可能要更新Vuex商店)

但这可能需要更复杂的逻辑,您可能必须编写很多代码来保持在线用户列表的更新...我认为最好转到解决方案2 ...

使用presence channels

我认为这是最好的方法,因为它不需要良好的Laravel-echo配置。对于本例,我正在使用Pusher(根据您的要求),但是可以使用所有Laravel广播驱动程序来实现此解决方案。

  • 用户登录后,只需向他/她订阅状态频道(here Laravel文档)
  • 使用Laravel Echo,将用户订阅到该频道
var chatRoom = Echo.join('my.chat.room.id');
  • 订阅后,使用members.count方法保留频道用户的更新列表。
  • 使用setTimeout()函数,您可以实时更新用户列表。

注释

我从未在生产环境中实现过此解决方案,而只是编写了一些代码来查看其工作原理。因此,我认为如果其他人有不同的观点或有更好的方法来解释此过程,我将很乐意更新我的答案。