Socket.io检查除了来自客户端的心跳之外的不活动

时间:2013-01-03 10:54:37

标签: node.js socket.io

我有一个使用nodejssocket.io聊天功能的PHP应用程序。 我现在需要做的是在用户休眠超过15分钟时将用户注销。

会话在PHP应用程序和Nodejs服务器之间共享。因此nodejs服务器知道用户上次登录的时间或他/她上次活动的时间。

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

由于PHP应用程序只知道用户在页面重新加载或导航时的活动,因此用户在休眠时仍然可以聊天,而PHP应用程序将不知道用户是否正在聊天。因此,从会话中检查用户的上一个活动将不起作用。

这里的主要问题是,我可以识别一个仅发送心跳超过15分钟(没有发出声)的客户端吗?

1 个答案:

答案 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);
    });
});