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の状態が取れないので、同じような解決策は取れません。