websocketの接続が、1分程度で切断されてしまいます。
サーバサイドでは「broken pipe」となっており、クライアントサイドではエラーコード1006が出力されていました。
websocketのエラーコードにはセキュリティ上の観点から情報隠蔽を意図した「何かのエラー:1006」という物があり、クライアントからは事実上何も情報が得られていません。
keepaliveのような設定があるのかと思い調べたのですが、今の所見つけられていません。
テストで作った簡易チャットでは、チャットを打ち続けていれば切断されないため、いわゆるpingpongのようなものを定期的に行えば維持できるとは思うのですが、それで正しいのか悩んでいます。
構成(サーバ)
役割 | 使っているもの |
---|---|
フロント | Nginx 1.12.0(unix domain socket) |
バックエンド | Golang 1.11.4(FW echo)、golang.org/x/net/websocket |
発生している問題・エラーメッセージ
[サーバ] Nginx アクセスログ
indexページに普通に接続して、websocket接続の切り替え(101)も成功している
192.168.10.2 - - [11/Feb/2019:14:14:11 +0900] "GET / HTTP/1.1" 200 1498 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-" 192.168.10.2 - - [11/Feb/2019:14:15:15 +0900] "GET /ws HTTP/1.1" 101 17 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
[サーバ] Nginx エラーログは出力なし
[サーバ] Go-echoアプリサーバから出している切断時ログ
大体1分後に切断されている。エラー内容は「broken pipe」
ぴったり1分じゃないのは「test」と一言チャットしたせいです。
2019/02/11 14:14:11 Added new client. Clients connected: 1 2019/02/11 14:15:15 Delete client number: 1 2019/02/11 14:15:15 Error: write unix /srv/www/localhost/tmp/goecho.sock->@: write: broken pipe
[クライアント] エラーオブジェクトeの内容
chromeで、onclose(切断)時にconsole.logに出力しました。
このエラーコードには意味がないようです。
参考リンク→WebSocketの仕様を調べていたら頭がどうにかなりそうだった。
CloseEvent { isTrusted: true, wasClean: false, code: 1006, reason: "", type: "close", … } WebSocket { url: "ws://localhost/ws", readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, … }
原因や定番の対策につきまして、お教えいただきたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。