通常の状況では、クライアントが切断されると、サーバーに fin パケットが送信されます。fin パケットを受信すると、サーバーはクライアント接続が切断されたことを認識し、ただちにonClose イベント コールバック。
ただし、クライアントの停電、ネットワークのシャットダウン、ネットワーク ケーブルの取り外し、ルーティング障害などの極端な状況がいくつかあります。これらの極端な状況では、クライアントは fin パケットをサーバーに送信できず、サーバーは接続が切断されたことを認識できません。クライアントとサーバー間で定期的にハートビート データが送信されている場合、接続の切断が比較的適時に検出され、onClose イベント コールバックがトリガーされます。
さらに、ルーティング ノードのファイアウォールは、長期間通信されていないソケット接続を閉じるため、長時間のソケット接続が切断されます。したがって、 では、接続が切断されないように、クライアントとサーバーがハートビート データを定期的に送信する必要があります。
GatewayWorker でハートビート検出を構成するにはどうすればよいですか?
現在、GatewayWorker は 2 種類のハートビート検出をサポートしています。サーバーは、ハートビートが受信されない場合に接続を閉じるまでの秒数を設定できます (推奨)。サーバーがハートビート データを定期的にクライアントに送信することもサポートしています(推奨されません)。
クライアントは定期的にハートビートを送信します (推奨)
クライアントは定期的にハートビートをサーバーに送信します (間隔は 60 秒未満であることが望ましい)。サーバー構成は次のようになります。
$gateway = new Gateway("Websocket://0.0.0.0:8585"); $gateway->pingInterval = 55; $gateway->pingNotResponseLimit = 1; $gateway->pingData = '';
上記の構成の意味は、クライアント接続 pingInterval*pingNotResponseLimit=55 秒以内にリクエストがない場合、サーバーは対応するクライアントが接続されたと判断することです。がオフラインになった場合、サーバーは接続を閉じて、onClose コールバックをトリガーします。
ワーカーマンの知識について詳しくは、ワーカーマン チュートリアル 列に注目してください。
以上がワーカーマンがつながりを保つ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。