6

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

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

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

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

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

4

1 回答 1

9

根据聊天活动注销的最简单方法是设置一个简单的计时器,每次用户聊天时都会重置该计时器。像这样的东西:

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);
    });
});
于 2013-01-03T11:55:57.307 回答