WebSocket備忘録
はじめに
javascript歴3,4ヶ月の初心者です。
自分の備忘録用に書いていますが、本記事で指摘事項などありましたらコメントにて教えていただければ幸いです。
WebSocket通信でハマったこと
WebSocketとnode.jsを使っでソケット通信の勉強をしている時、node.jsでサーバーを立ち上げずに以下のコードを実行すると、エラーになる。
//これがエラーになる
var ws = new WebSocekt('ws://127.0.0.1:50000/');
window.addEventListener('open', function(e) {
console.log('Socekt Open!');
});
このエラーが発生した後にサーバーを起動してもつながってはくれいない。
サーバーが起動していなくてもリトライをして、繋ぎに行く処理を作りたかった。
解決案
その1
脊髄反射でtry~catch文でエラーのところを囲めばどうにかなるかなと思って実行。
function socketConnect() {
try{
var ws = new WebSocekt('ws://127.0.0.1:50000/');
} catch(e) {
socketConnect();
}
window.addEventListener('open', function(e) {
console.log('Socekt Open!');
});
}
try~catchでエラーになったら再帰的に呼び出してもう一回同じ処理を実行するみたいな感じで書いてみたが、エラーは相変わらず出るし再帰呼び出しもされていなかった。
その2
WebSocketのイベントにあるcloseイベントでエラーを取得する。
function socketConnect() {
var ws = new WebSocekt('ws://127.0.0.1:50000/');
window.addEventListener('open', function(e) {
console.log('Socekt Open!');
});
window.addEventListener('close', function(e){
socektConnect();
});
}
まとめ
リファレンスによると次のように書かれている。
1006 Abnormal Closure 予約済。ステータスコードが必要なときに、接続が異常終了した (つまり、クローズフレームが送信されていない) ことを示すために使用されます。
つまり、サーバーを立てずに繋ぎに行こうとした場合このコードが取れるらしい。このコードの時は再帰呼び出しをするようにすれば、上記のエラーが起きてもサーバーが立つまで再接続ができる。
他にも成功時には"1000"、プロトコルエラーの時は"1002"といったように、クローズイベントのコードごとに対応するエラーがある(ユーザで設定することも可能)。
Author And Source
この問題について(WebSocket備忘録), 我々は、より多くの情報をここで見つけました https://qiita.com/law_1138/items/7d55074c5bf87a54ca59著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .