私はSQLデータベースのユーザーに対してオフラインに設定された簡単なコードを使用しました。Socket.io '切断イベント'が再接続後に遅すぎます。
サーバー
io.on('connection', function (socket) {
ApiHelper.setUserOnline(socket.token);
socket.on('disconnect', function() {
ApiHelper.setUserOffline(socket.token);
});
}
は、ユーザが、彼はその後、再接続し、ネットワーク接続を失ったよりも、ソケットに接続、
を言うことができます。
このログを取得します。接続
- ユーザー(彼がオンラインである)
- ネットワークlosted。
- ネットワークが切断されましたが、切断イベントがまだサーバーによって受信されていないため、ユーザーはまだオンラインです。
- ネットワークに接続してからソケットに接続します。ユーザーはまだオンラインです。
- 以前にサーバーとユーザーによって受信された切断イベントは、データベースでオフラインに設定されています。 しかし、待っているユーザーが再接続しただけなので、実際にはユーザーはオンラインになっている必要があります。我々はユーザーを見たので、後半の火力切断イベントの
は、データベース内のオフラインになっています。
どのようにこの問題を解決できますか?
は、各セッションには、一意のIDか何かを持っていますそんな? – tobifasc
@tobifascはい、トークンは各ユーザーの一意のIDです。 – ocanal
私は各ユーザーではなく、ユーザーが作成したセッションごとに使用します。接続されたログと切断されたログにセッションIDを追加できます。したがって、ユーザーが古いセッションIDで切断したときに、新しいセッションIDを既に取得している場合、その新しいセッションIDから切断されることはありません。あなたはアイデアを得ますか? – tobifasc