インターネット技術の発展に伴い、システムの高可用性を確保するために、コンピュータ システムを継続的に最適化および改善する必要があります。その中でもハートビート検出はサーバーがオンラインかどうか、ネットワークが正常かどうかを検出するために使用される非常に重要な機能です。この記事では、PHPとキープアライブを使ってリアルタイムハートビート検出を実装する方法を紹介します。
1. Keepalive の概要
Keepalive を紹介する前に、まず TCP の 3 ウェイ ハンドシェイク プロセスを理解しましょう。 TCP 接続の確立には 3 ウェイ ハンドシェイクが必要です。つまり、クライアントは SYN パケットをサーバーに送信し、サーバーは受信後に SYN ACK パケットを送信し、最後にクライアントは別の ACK パケットを送信します。無事に確立されました。
クライアントがリクエストを送信したときにサーバーが応答しない場合、クライアントは接続が切断されたと判断します。しかし、ネットワークの変動やサーバーの混雑によりサーバーが応答できない場合があり、その際に接続が切断されるとユーザーエクスペリエンスに影響を与えるため、接続を維持する仕組みが必要になります。
Keepalive は、TCP 上に構築されたネットワーク プロトコルで、接続がまだ生きているかどうかを検出するために使用されます。一定期間接続がアイドル状態になると、キープアライブはサーバーに検出パケットを送信し、それでもサーバーが応答しない場合は、接続が切断されたと判断します。
2. PHP を使用してハートビート検出を実装する
ハートビート検出を実装するには 2 つのスクリプトが必要です。1 つはクライアント スクリプト (Client.php) で、ハートビート リクエストをサーバーに送信するために使用されます。もう 1 つはハートビート リクエストを受信し、適切な応答で応答するサーバー スクリプト (Server.php) です。具体的な実装を見てみましょう。
クライアント スクリプト (Client.php)
<?php while(true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://localhost:8000/');//服务器地址 curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch); sleep(5);//每 5 秒发送一次心跳请求 } ?>
上記のコードでは、curl を使用して HTTP リクエストを送信し、定期的にハートビート リクエストをサーバーに送信し、sleep() 関数を使用してスケジュール送信を実装します。
サーバー スクリプト (Server.php)
<?php header('Content-Type: text/plain'); echo "OK ";//响应成功信息 ?>
上記のコードでは、サーバー スクリプトは、クライアントから送信されたリクエストを受信した後、単純な成功メッセージで応答します。
サーバーを実行し続けるために、サーバー スクリプトの実行環境として Nginx や Apache に似たサーバー ソフトウェアを使用できます。
3.キープアライブを使用してハートビート検出を実装する
キープアライブを使用してハートビート検出を実装するには、キープアライブ ソフトウェアと関連構成のインストールが必要です。 CentOS システムでは、次のコマンドを使用してキープアライブをインストールできます:
sudo yum install ipvsadm keepalived -y
次に、キープアライブ構成ファイル (keepalived.conf) の例を示します。 ##
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.10.10 } track_script { chk_http_port } } vrrp_script chk_http_port { script "/usr/local/bin/alive.sh" interval 5 weight 2 } virtual_server 192.168.10.10 80 { delay_loop 6 lb_algo rr lb_kind DR protocol TCP real_server 192.168.10.11 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
#!/bin/bash A=`curl -I -s -o /dev/null http://localhost` if [ "$?" != "0" ] || [ "$A" == "" ]; then /etc/init.d/keepalived stop fi exit 0
以上がPHP とキープアライブを使用したリアルタイムのハートビート検出の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。