質問: websocketを用いたWebアプリを作成しています。 現在、JavaScriptからnew WebSocket("wss://{hostname}")で接続を開始し、onOpenが呼ばれた後は数回、sendメソッドやonmessageイベントハンドラでサーバーとの通信を行えているのですが、無通信状態で無いにもかかわらず、いつも30秒前後でonCloseが発生して接続が切れてしまいます。 ※関係あるかわかりませんが、PCの開発環境でlocalhostのAPサーバーとwebsocketを行う場合はこのような問題は起こりません。 接続すらできないとか、無通信状態のときのTimeoutが早い、とかであれば、色々と解決策を見たことがあるのですが、私のような状況の場合、どのような原因が考えられるでしょうか。 (サーバーは、Swift実装のVaporCloudを使っていますが、特定のサーバーによる原因以外でも、何かあれば、教えてください)。 よろしくお願いします。
回答: localhostで発現せず、リモートに接続して毎回30秒前後で接続が切れる場合、ネットワーク構成が気になります。 ひょっとしてAPサーバの前段にロードバランサやプロキシが設置されていて30秒で接続を断つ設定になっていませんか?または手元のルータ、端末のファイヤーウォールに同様の設定があるかもです。 それでもダメならAPサーバが原因だと思いますが、VaporのGithubに類似ケースが投稿されていました。 対策としては30秒を超えるタイムアウトを指定すれば良いみたいです。 (2017年の情報ですが) ``` import HTTP HTTP.defaultServerTimeout = 60 * 60 ```