我有这个工作:
Echo.join(`chat.${roomId}`)
.here((users) => {
//
})
.joining((user) => {
this.users.push(user);
})
.leaving((user) => {
this.users = this.users.filter(u => u.id != user.id);
});
这向我显示了当前用户的准确列表。但是我想要的是将它们的状态也带有时间戳存储在数据库中。
所以我想到了这个功能:
saveStatus(user, status) {
axios.post("/logbooks", { user_id: user.id, status: "offline"})
}
然后在加入和离开状态下调用该函数。但这并不准确:只有一个用户在线时,它不会存储值。当有20位用户离线时,有1位用户离线,它将存储此值的19倍。
有关如何获得更准确的联机-脱机日志到数据库的任何提示?
您可以通过使用Laravel Echo Server(而不是Pusher)和Redis解决此问题。这里是文档:
https://github.com/tlaverdure/laravel-echo-server#presence-channels
Redis处理发布/订阅机制。每当有人加入/离开状态通道时,Laravel Echo Server就会发布,并且使用Artisan命令,您可以订阅Redis并通过通知数据库对加入/离开做出反应。