我有一个PHP应用程序,它具有使用nodejs和的聊天功能socket.io.我现在需要做的是在用户休眠超过15分钟时将用户注销.
会话在PHP应用程序和Nodejs服务器之间共享.因此,nodejs服务器知道用户上次登录的时间或他/她上一次活动的时间.
我正在考虑向logoffsocket.io客户端发送命令,如果我可以区分心跳和来自客户端的消息,那将非常容易.
由于PHP应用程序只知道用户在页面重新加载或导航时的活动,因此用户在休眠时仍然可以聊天,而PHP应用程序将不知道用户是否正在聊天.因此,从会话中检查用户的上一个活动将不起作用.
所以这里的主要问题是,我能识别一个仅发送心跳超过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);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |