我有一个使用nodejs
和socket.io
聊天功能的PHP应用程序。
我现在需要做的是在用户休眠超过15分钟时将用户注销。
会话在PHP应用程序和Nodejs
服务器之间共享。因此nodejs
服务器知道用户上次登录的时间或他/她上次活动的时间。
我正在考虑向socket.io客户端发送logoff
命令,如果能够区分心跳和来自客户端的消息,那将非常容易。
由于PHP应用程序只知道用户在页面重新加载或导航时的活动,因此用户在休眠时仍然可以聊天,而PHP应用程序将不知道用户是否正在聊天。因此,从会话中检查用户的上一个活动将不起作用。
这里的主要问题是,我可以识别一个仅发送心跳超过15分钟(没有发出声)的客户端吗?
答案 0 :(得分:5)
根据聊天活动注销的最简单方法是使用一个简单的计时器,每次用户聊天时都会重置该计时器。像这样:
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);
});
});