非アクティブ状態が 2 時間続いた後、ユーザーを socket.io から切断し、プロンプト/再接続ボタンを表示したいと思います。
まず、自動再接続をfalseに設定し、変数forcedcを設定しました:
var socket = io.connect('https://coinchat.org:443',{secure: true, reconnect: false});
var forcedc = false;
次に、誰かがマウスを動かしたときにリセットされる非アクティブのタイムアウトがあります。
$("body").mousemove(function(e){
clearTimeout(dcTimeout);
dcTimeout = setTimeout(function(){
if(!forcedc){
forcedc = true;
socket.disconnect();
$("#dcmodal").modal('show');
}
}, 1000 * 60 * 60 * 2);
});
基本的に、forcedc は、非アクティブなためにユーザーが切断されたことを意味し、ブラウザーはページを更新して再接続を試みる必要はありません。forcedc が false の場合、ネットワークの問題またはサーバーの再起動によりユーザーが切断されたことを意味し、ブラウザーはページを更新して再接続する必要があります。
さて、ソケットが切断されたとき:
socket.on("disconnect", function(data){
if(!forcedc){
setTimeout(function(){document.location.reload(true)}, 1000 + Math.random()*12750);
}
});
forcedc が false の場合、ページは更新されます。ただし、非アクティブのためにユーザーがすでに「切断」されている場合でも、ページは更新されます (切断されたモーダルが表示されるため、forcedc = true が実行されたことがわかります)。
私は何を間違っていますか?