2016-12-12 10 views

答えて

6

いいえ、直接ではありません。設計上、OSはプロセスがシャットダウンしたときにプロセスが所有するすべてのリソースをクリーンアップします。これは、OSがプロセスの起動と停止に伴ってリソースのリークを防ぐ方法です。したがって、サーバープロセスがシャットダウンすると、開いているソケットはすべてOSによってシャットダウンされます。

通常の設計ソリューションは、クライアントが接続を失うつもりがないときにwebSocket接続が失われた場合に自動的に再接続するコードを作成することです。このタイプの自動再接続の振る舞いは、この正確な理由からsocket.io(webSocketの上にあるレイヤー)に組み込まれています。

クライアントがプロキシに接続してからプロキシがサーバーに接続するようにプロキシをサーバーの前に挿入すると、サーバーに自動的に再接続するようにプロキシを教えることができます(サーバがダウンしている間にメッセージを送信しようとしなかった限り)クライアントが何も起こっていないことを知らないようにします。もちろん、プロキシの再起動の問題も同じです。

一部のオペレーティングシステムでは、同じホスト上の1つのプロセスから別のプロセスにTCPソケットの所有権を移すことができます。だから、私はあなたが一時的なプロセスを起動し、サーバーからこの一時的なプロセスにすべてのwebSocketソケットを転送してから、サーバーを再起動し、新しいサーバーインスタンスが起動した後に、ソケットを戻してから一時的なプロセスを終了します。

webSocketが誤って切断される理由は複数あるため、クライアント側の再接続は、サーバーの再起動と、システムで発生する可能性があり、すでに書かれている。

+0

私はすでに再接続コードを追加していますが、ユーザーは良い経験を得ることができません。 また、クライアントの再接続が始まると、サーバのCPU使用率と帯域幅が増加します。 – Chintan

+0

@Chintan - クライアントの再接続でクライアントの経験が悪化する理由は不明です。サーバーが少しダウンしてしまい、再起動時にすべてのクライアントが基本的にオフラインになります。再起動時に複数のサーバーを使用し始める場合と、他のサーバーがオンラインになっている場合を除き、それについては何もできません。はい、サーバーCPUをもう一度接続するともう少し時間がかかりますが、それは非常に短い期間で、通常の状態に戻ってください。 – jfriend00

関連する問題