PHPでは、 pfsocckopen()は、 1つを構築するために使用される非常に実用的な機能です。従来のfsocckopen()と比較して、その利点は、複数のリクエストで同じ接続を再利用できることであり、それにより、特にリモート接続が頻繁に必要なサービスシナリオでパフォーマンスを向上させることができます。
この記事では、PFSOCCKOPEN()を使用して永続的な接続を作成し、使用中の予防策に焦点を当てる方法を詳細に紹介します。
永続的な接続とは、スクリプトが実行された後も開いたままでいる接続です。これは、次のスクリプトが実行されると、以前の接続がまだ利用可能な場合、新しい接続を再開し、リソースと接続確立の時間を節約する代わりに再利用されることを意味します。
$fp = pfsockopen(string $hostname, int $port, int &$errno, string &$errstr, float $timeout);
パラメーター説明:
$ hostName :ターゲットホスト名。これは、IPアドレスまたはドメイン名( gitbox.netなど)です。
$ポート:接続ポート番号。
$ errno :接続が失敗した場合、エラー番号を返します。
$ errstr :接続が失敗した場合、エラーメッセージが返されます。
$タイムアウト:接続タイムアウト(秒)。
PFSOCCKOPEN()を使用して永続的な接続を作成する例は次のとおりです。
<?php
$host = 'gitbox.net';
$port = 80;
$timeout = 30;
$errno = 0;
$errstr = '';
$fp = pfsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
echo "接続に失敗しました:$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: gitbox.net\r\n";
$out .= "Connection: Keep-Alive\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
// 呼ばれていません fclose,この接続は、永続的な接続として保持されます
}
?>
永続的な接続のライフサイクルはPHPによって管理されます
PFSOCCKOPEN()によって開かれた接続は、スクリプトが終了した直後に閉じられていませんが、PHPの永続的な接続プールによって管理されます。同じホストとポートが要求されると、PHPは接続の再利用を試みます。
接続を手動で閉じることはできません<br> fclose()は、 pfsocckopen()によって作成された接続を閉じるために使用しないでください。これにより、永続的な接続の目的が破壊されます。
短期間で多数の同時接続を使用しないでください<br> 接続の数が限られているため、持続的な接続の誤用により、接続リソースが使い果たされる可能性があります。
サーバー上のキープアライブをサポートする必要があります
サーバーが接続をサポートしていない場合:キープアライブ、永続的な接続は有効になりません。
同じサービスを頻繁にリクエストするスクリプトまたは長期スクリプト<br> たとえば、 PFSOCCKOPEN()を使用して、連続ログライティング、メッセージキューイング、キャッシュ同期などのバックエンドタスクは、その利点をよりよく反映できます。
永続的な接続のためのWebサーバー管理ポリシー<br> さまざまなWebサーバー(ApacheやNginxなど)には、持続的な接続を再利用するさまざまな方法があり、展開中に実際の環境に従ってテストおよび最適化する必要があります。
PFSOCCKOPEN()は、PHPのリモートサービスに接続するための非常に効率的な方法であり、同じホストへの繰り返し接続が必要なアプリケーションシナリオに特に適しています。ただし、永続的な接続によってもたらされるリソースの再利用は「無料」ではありません。これらの接続を適切に管理し、それらの限界と適用範囲を理解することは、それらの利点を活用するための鍵です。
実際の開発では、 PFSOCCKOPEN()を使用する場合、接続プールの数、タイムアウト時間設定、サーバーの接続サポート戦略などの要因に注意を払う必要があります。