如何解决在Laravel Websockets中检查用户是否离线
我正在使用Laravel Websockets构建我的第一个聊天应用程序。它包含的一个功能是访客登录:当未注册的访客进入聊天室时,将为其创建访客用户帐户。该访客离开后,该临时帐户应删除。如果用户实际单击“注销”按钮,则这很容易。但是,如果用户只是关闭标签或离开页面,我也需要这样做。
我已经在用户表中添加了一个“ last_activity”字段,并且在一定时间内处于非活动状态的用户将被计划任务删除。但是,只要打开聊天标签,我就需要允许用户长时间闲置。因此,我添加了一个“ is_online”标志,并且只会删除不活动的用户(如果他们不在线)。现在,我只需要设置此标志即可。
我在收听状态频道时尝试这样做,在“加入”事件中将“ is_online”设置为1,在“离开”中设置为0。
public function getListeners()
{
return [
"echo-presence:chat.{$this->roomId},joining" => 'setUserJoining',"echo-presence:chat.{$this->roomId},leaving" => 'setUserLeaving',];
}
public function setUserJoining($user)
{
$currentUser = User::find($user['id']);
$currentUser->is_online = 1;
$currentUser->save();
}
public function setUserLeaving($user)
{
$currentUser = User::find($user['id']);
$currentUser->is_online = 0;
$currentUser->save();
}
但是事实证明,这仅在至少有一个在线用户时才有效。如果用户进入一个空房间,或者房间中的最后一个用户离开,则该标志不会更改。有没有更简单的方法可以做到这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。