3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebSocketは、OPENイベント発火からCONNECTINGになるまでに、少し間がある

Posted at

WebSocketは、OPENイベントが発火してから、実際にCONNECTING状態になるまでに少し間があり、その間にデータを送信するとこけます。

検索したら、いくつか解決策があったのですが、JavsScriptに関する限り、自分は以下で乗り越えました。-> OPENイベントの直後のデータ送信は、またCONNECTINGになっていないという前提で、Statusをチェックして、まだConnectingでないなら少したってから試す。


function safeSend(socket, param) {
    console.log('safeSend to ' + socket.url);
    switch (socket.readyState) {
        case socket.OPEN:
            socket.send(param);
            break;
        case socket.CONNECTING:
            setTimeout( safeSend(socket, param), 100 );
            break;;
        case socket.CLOSING:
        case socket.CLOSED:
            console.log('websocket is CLOSING or CLOSED');
            break;
    };
}
...
メインの処理
   ws.onopen = () => {
        safeSend(ws, '...');
    ...
    };
    ...
    ws.onmessage = e => {
        //接続された後の処理
    ws.send('...');
...

一方、Pythonのaiohttpでは、WebSocketの状態が取れないので、同じような解決策は取れません。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?