6

と を使用したチャット機能を持つ PHP アプリケーションがnodejsありsocket.ioます。ここで行う必要があるのは、ユーザーが 15 分以上休眠している場合にユーザーをログアウトすることです。

セッションは、PHP アプリケーションとNodejsサーバーの間で共有されます。したがってnodejs、サーバーは、ユーザーが最後にログインしたのはいつか、または最後のアクティビティがいつだったのかを知っています。

コマンドを socket.io クライアントに送信することを考えlogoffています。ハートビートとクライアントからのメッセージを区別できれば、非常に簡単です。

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 に答える