【问题标题】:Laravel Echo and Laravel Echo server and socket: Distinguish join and leave events in server sideLaravel Echo 和 Laravel Echo 服务器和套接字:区分服务器端的加入和离开事件
【发布时间】:2020-07-03 05:40:02
【问题描述】:

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

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

我该怎么做?

我的解决方案

解决方案 1

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

解决方案 2

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

提前致谢。

【问题讨论】:

  • 很高兴知道您是否使用像Vue / Angular这样的前端框架,您只是在编写原始JS。

标签: laravel sockets laravel-echo


【解决方案1】:

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

观看此 Laracast Episode 8 视频,您可以根据您的离线用户列表调整其中的示例。

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

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


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
  }

}

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2019-02-08
    • 1970-01-01
    • 2019-05-29
    • 2020-12-28
    • 2021-12-25
    • 2015-02-09
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多