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

时间:2020-03-22 16:41:39

标签: laravel sockets laravel-echo

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

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

我该怎么做?

我的解决方案

解决方案1 ​​

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

解决方案2

当某个用户发生事件时,如果该用户已经存在于Redis的我的列表中,则显然这是一个休假事件,因为用户随时可以完全在线一次,并且该用户不存在于列表,因此它必须是一个联接,因为如果列表中已经存在该联接,则没人可以联接。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

观看此Laracast Episode 8视频,您可以使用离线用户列表修改其中的示例。

我建议使用视频所示的user.idparticipantshere钩子将在线用户的joining推入leaving数组列表中。

在输出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
  }

}