4

成功するまで定期的に Websocket 接続を開こうとします。だから私は5秒ごとに試していますが、最初は約1分ほどでうまくいくようです。つまり、サーバーが無効になっている場合、接続が試行され、readyState が 3 に設定されてすぐに閉じられ、5 秒後に別の試行が行われ、別の同じ応答が返されます。しかし、その後 1 ~ 2 分後には接続を閉じず、接続状態 (readyState==0) でハングします。

function wsConnect()
  {
  console.log("trying to connect...");
  var socket = new WebSocket("wss://blahblah.com");
  socket.onopen=function(){console.log("open");};
  socket.onerror=function(){console.log("error");};
  socket.onclose=function(msg){console.log("close");};

  setTimeout(function(){console.log("RS:"+socket.readyState);socket.close();wsConnect();},5000);
  }

興味深いことに、その後サーバーを起動すると、何十もの接続がヒットし、おそらく readyState 0 になったすべての接続がキューに入れられます。readystate 0 接続を完全につぶして破壊する方法はありますか? 開いていないので閉められません。

または、サーバーが利用可能になったときに接続できるようにするために定期的に接続試行を行うにはどうすればよいですか?

ブラウザ:クローム

readystate 0 で応答し始めると、ページを更新しても修正されません。まったく新しいドメインに移動してから戻るだけで、リセットされたように見えます。

4

1 に答える 1

0

最初の接続が閉じられるまで別の接続を試行してから、oncloseイベントで再接続を実行しないでください。この方法では、最初の接続が失敗しない限り、別の接続を作成しません。

function wsConnect()
{
    console.log("trying to connect...");
    var socket = new WebSocket("wss://blahblah.com");
    socket.onopen = function() { console.log("open"); };
    socket.onerror = function() { console.log("error"); };
    socket.onclose = function(msg) {
        console.log("close");
        setTimeout(wsConnect, 5000);
    };
}
于 2012-08-12T10:25:48.723 に答える