通常の状況では、クライアントが TCP 接続を中断すると、FIN パケットを送信し、4 回の切断ハンドシェイクを実行してサーバーに通知します。ただし、突然の停電やクライアント側のネットワーク異常などの異常事態では、サーバーがクライアントの切断を認識できない場合があります。
特にモバイル ネットワークの場合、TCP 接続は非常に不安定であるため、サーバーとクライアント間の接続の有効性を保証するメカニズムが必要です。
Swoole 拡張機能自体にはこのメカニズムが組み込まれており、開発者はこれを有効にするために 1 つのパラメーターを構成するだけで済みます。 Swoole はクライアントデータを受信するたびにタイムスタンプを記録し、クライアントが一定時間内にサーバーにデータを送信しない場合、サーバーは自動的に接続を切断します。 (推奨学習: swoole ビデオ チュートリアル )
使用方法:
$serv->set(array( 'heartbeat_check_interval' => 5, 'heartbeat_idle_time' => 10, ));
上記の設定は 5 秒ごとにハートビートを検出することです。TCP 接続が 10 秒以内に接続された場合サーバーにデータが送信されない場合は切断されます。
高度な使用法:
swoole_server::heartbeat() 関数を使用して、ハートビートの有効期限が切れているかどうかを手動で検出します。この関数は、heartbeat_idle_time よりも長くアイドル状態になっているすべての TCP 接続を返します。プログラムは、データの送信や接続の終了など、これらの接続に対していくつかの操作を実行できます。
以上がswooleがオフラインにならないようにする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。