我正在为移动应用程序构建Web服务。我需要知道哪些移动用户在线。我是通过Laravel echo实现的-laravel echo server-socket io和redis。一切正常,客户通过在线渠道监听事件。
问题是,离开和加入事件在客户端,而当用户离开频道时,我需要从Redis中存储的列表中删除它,实际上我需要知道加入还是离开那一个发生在服务器端而非客户端,以便能够更新Redis中的在线用户。
我该怎么做?
如果服务器端有here
方法的任何实现返回在线用户,则可能可行,实际上我可以将列表与here
进行比较以获取最新更新。
当某个用户发生事件时,如果该用户已经存在于Redis的我的列表中,则显然这是一个休假事件,因为用户随时可以完全在线一次,并且该用户不存在于列表,因此它必须是一个联接,因为如果列表中已经存在该联接,则没人可以联接。
谢谢。
答案 0 :(得分:1)
您应该使用Presence Channels来实现此功能。
观看此Laracast Episode 8视频,您可以使用离线用户列表修改其中的示例。
我建议使用视频所示的user.id
,participants
,here
钩子将在线用户的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
}
}