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

Bro*_*cha 6 node.js socket.io

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

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

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

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

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

mek*_*all 6

基于聊天活动注销的最简单方法是使用一个简单的计时器,每次用户聊天时都会重置.像这样的东西:

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)