サーバー アプリケーションでのクライアント ソケットの切断を確実に検出する
ネットワーク化されたアプリケーションは、安定性を維持するためにクライアントの切断を正確に検出することに依存しています。 ただし、クライアントがサーバー ソケットからいつ切断されたかを確実に判断することは、大きな課題となります。
課題:
クライアントがソケットから切断されたとき、サーバーはどのようにして確実に検出できますか?
効果のないアプローチ:
handler.Available
、handler.Send
、handler.Receive
などのメソッドを使用して切断を識別する一般的な試みは、サーバーの観点からは信頼できないことが判明しています。
堅牢なソリューション:
組み込みのソケット切断イベントがないため、定期的なポーリング手法が必要です。 次の SocketExtensions
メソッドは、ソケットの接続を検証するための信頼できるソリューションを提供します。
<code class="language-csharp">public static bool IsConnected(this Socket socket) { try { return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0); } catch (SocketException) { return false; } }</code>
このメソッドは、Poll
メソッドを利用して、短い時間枠 (1 ミリ秒) 内に受信データをチェックします。 この間隔内にデータがない場合は、切断の可能性があることを示します。
以上がサーバーはどのようにしてクライアントソケットの切断を確実に検出できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。