gpt4 book ai didi

node.js - Socket.io 除了来自客户端的心跳检查不活动

转载 作者:搜寻专家 更新时间:2023-10-31 22:44:01 24 4
gpt4 key购买 nike

我有一个 PHP 应用程序,它使用 nodejssocket.io 来实现聊天功能。我现在需要做的是,如果用户处于休眠状态超过 15 分钟,则将用户注销。

session 在 PHP 应用程序和 Nodejs 服务器之间共享。所以 nodejs 服务器知道用户最后一次登录的时间或他/她最后一次事件的时间。

我正在考虑向 socket.io 客户端发送一个 logoff 命令,如果我能区分心跳和来自客户端的消息,那将非常容易。

由于 PHP 应用程序只会知道用户在页面重新加载或导航时的事件,因此用户可能在休眠时仍在聊天,而 PHP 应用程序不知道用户是否在聊天。因此,从 session 中检查用户的最后事件是行不通的。

所以这里的主要问题是,我能否识别出仅发送心跳超过 15 分钟(未发出)的客户端?

最佳答案

根据聊天事件注销的最简单方法是使用一个简单的计时器,该计时器会在用户每次聊天时重置。像这样:

io.sockets.on('connection', function(socket) {
// ...
var logoffTimer;
socket.on('chat', function() {
// clear the timer on activity
// should also update activity timestamp in session
clearTimeout(logoffTimer);
// set a timer that will log off the user after 15 minutes
logoffTimer = setTimeout(function(){
// add log off logic here
// you can also check session activity here
// and perhaps emit a logoff event to the client as mentioned
socket.emit("logoff", { reason: "Logged off due to inactivity" });
}, 60 * 15);
});
});

关于node.js - Socket.io 除了来自客户端的心跳检查不活动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com