【问题标题】:Laravel socket io laravel-echo: get number of subscribed users to channelLaravel socket io laravel-echo:获取订阅频道的用户数
【发布时间】:2020-07-12 20:11:34
【问题描述】:

我正在通过 Laravel echo server、socket.io、redis 构建一个实时应用程序。我需要知道有多少用户订阅了某个频道。我该怎么做?

【问题讨论】:

  • 我认为您正在寻找的内容如下所述:pusher.com/tutorials/online-presence-laravel。基本上,您在用户加入时向服务器发送事件,并在用户离开时发送事件。您可以在用户上设置一个值以查看它是否在线。然后您可以选择所有在线用户或统计他们。

标签: laravel socket.io laravel-echo


【解决方案1】:

在线查看Joining Presence Channels并注意channelhere方法和users的数组列表。

您可以使用users.length 获取在线用户数并将其设置在变量中。

然后您需要使用joiningleaving 挂钩来增加(++)和减少(--)计数器。


const totalOnline = 0;

Echo.join(`chat.${roomId}`)
    .here((users) => {
        totalOnline = users.length
    })
    .joining((user) => {
        totalOnline++;
    })
    .leaving((user) => {
        totalOnline--;
    });

【讨论】:

  • 我需要知道服务器端的用户数量
  • 有些驱动通过安卓应用上线。一旦用户提出递送包裹的请求,我需要找到最近的司机将包裹递送到目的地。所以当 NewRequest 事件被触发时,我向所有订阅的司机广播并要求他们发布他们的位置。发布所有位置可能需要几秒钟,但我不知道需要多长时间。因此,如果我知道有多少司机在线(或订阅),那么我知道我应该等待多长时间才能获得位置信息。
  • 应用程序在打开时不能每隔几分钟发布一次驱动程序位置吗?然后你就会知道谁在线以及在哪里持续。
  • 这样就不需要socket了。我们不知道何时发送请求。一个请求可能需要 30 分钟甚至一个小时。为什么我要让服务器忙于一个很少发生的请求?我们还需要实现地图跟踪。对于地图跟踪,你是对的,因为我确信司机正在移动并且会发生一些新的事情。但是在等待请求时,您的解决方案非常低效。
猜你喜欢
  • 2020-11-22
  • 2020-05-21
  • 1970-01-01
  • 2017-05-12
  • 2021-03-09
  • 2017-03-16
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多