繁体   English   中英

Laravel Echo 和 Laravel Echo 服务器和套接字:区分服务器端的加入和离开事件

[英]Laravel Echo and Laravel Echo server and socket: Distinguish join and leave events in server side

我正在为移动应用程序构建 Web 服务。 我需要知道哪些移动用户在线。 我通过 Laravel echo-laravel echo server-socket io 和 redis 实现了这个。 一切正常,客户端通过在线渠道监听事件。

问题是,离开和加入事件在客户端,而当用户离开频道时,我需要从存储在Redis的列表中删除它,实际上我需要知道哪个加入或离开发生在服务器端不是客户端,以便能够更新 Redis 中的在线用户。

我怎样才能做到这一点?

我的解决方案

解决方案1

如果服务器端有返回在线用户的here方法的任何实现,它可能会起作用,实际上我可以将我的列表与here进行比较以获取最新更新。

解决方案2

当用户发生事件时,如果该用户已存在于我的 Redis 列表中,则显然是离开事件,因为用户在任何时候都只能在线一次,如果该用户不存在于列表中,所以它必须是一个连接,因为如果它已经在列表中,没有人可以加入。

提前致谢。

您应该使用Presence Channels来实现此功能。

观看此 Laracast 第 8 集视频,您可以使用离线用户列表调整那里的示例。

我建议使用 channel here将在线用户的user.id推送到participants数组列表中, joining ,如视频所示leaving钩子。

在输出完整的users列表时,您可以使用包含检查他们是否在线。


const participants = [4, 34, 57, 70]

for (user of users) {

  if( participants.includes(user.id) ) {
   // The user is online, Set an online style or something
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM