1. ホーム
  2. javascript

[解決済み] WebSocket。WebSocketが終了した後、自動的に再接続する方法

2022-07-01 21:51:23

質問

var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function () {
  ws.send(JSON.stringify({
      .... some message the I must send when I connect ....
  }));

};

ws.onmessage = function (e) {
  console.log('Got a message')
  console.log(e.data);
};

ws.onclose = function(e) {  
  console.log('socket closed try again'); 

}

ws.onerror = function(err) {
  console.error(err)
};

初めてソケットに接続するときは、まずサーバーにメッセージを送って自分を認証し、チャンネルを購読する必要があります。

問題は、時々ソケットサーバが不安定になることです。 onerroronclose のイベントは 'ws' オブジェクトのイベントです。

質問です。ソケットが閉じたり、エラーが発生したときに、10秒間待ってからソケットサーバーに再接続する(そして最初のメッセージをサーバーに再送信する)ような良いデザインパターンは何でしょうか?

どのように解決するのですか?

私が行き着いたのは、こんな感じです。これは私の目的のために動作します。

function connect() {
  var ws = new WebSocket('ws://localhost:8080');
  ws.onopen = function() {
    // subscribe to some channels
    ws.send(JSON.stringify({
        //.... some message the I must send when I connect ....
    }));
  };

  ws.onmessage = function(e) {
    console.log('Message:', e.data);
  };

  ws.onclose = function(e) {
    console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
    setTimeout(function() {
      connect();
    }, 1000);
  };

  ws.onerror = function(err) {
    console.error('Socket encountered error: ', err.message, 'Closing socket');
    ws.close();
  };
}

connect();