ホームページ > バックエンド開発 > PHPチュートリアル > PHP はどのようにしてブロックせずに非同期 HTTP リクエストを行うことができますか?

PHP はどのようにしてブロックせずに非同期 HTTP リクエストを行うことができますか?

Barbara Streisand
リリース: 2024-12-25 22:01:14
オリジナル
622 人が閲覧しました

How Can PHP Make Asynchronous HTTP Requests Without Blocking?

PHP の非同期 HTTP リクエスト: 応答の待機を回避する方法

PHP で HTTP リクエストを処理するには、通常、file_get_contents( )、応答を受信するまでスクリプトの実行を一時停止します。これにより、特に複数のリクエストや時間に依存しないリクエストを行う場合、効率が制限される可能性があります。

解決策: ノンブロッキング HTTP リクエスト

この制限を克服するために、PHP はメソッドを提供します。ノンブロッキング HTTP リクエストを作成します。 1 つのアプローチは、stream_context_create():

$options = [
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode($data)
    ],
    'ssl' => [
        'verify_peer' => false
    ]
];
$context = stream_context_create($options);
file_get_contents("http://example.com/api", false, $context);
ログイン後にコピー

を使用することです。これにより、応答を待たずに HTTP リクエストが開始されます。ただし、証明書の検証の問題を回避するために、verify_peer オプションが false に設定されていることに注意することが重要です。

ソケットを使用したカスタム実装

別のオプションは、次を使用してソケットを直接作成することです。 PHP の fsockopen() 関数:

function post_without_wait($url, $params)
{
    // Prepare POST data and URL parameters
    $post_string = http_build_query($params);

    $url_parts = parse_url($url);
    $host = $url_parts['host'];
    $port = isset($url_parts['port']) ? $url_parts['port'] : 80;

    $socket = fsockopen($host, $port);

    // Construct HTTP POST request header
    $request = "POST {$url_parts['path']} HTTP/1.1\r\n";
    $request .= "Host: {$host}\r\n";
    $request .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $request .= "Content-Length: " . strlen($post_string) . "\r\n";
    $request .= "Connection: Close\r\n\r\n";
    $request .= $post_string;

    // Send HTTP request and close socket
    fwrite($socket, $request);
    fclose($socket);
}
ログイン後にコピー

この関数は、応答を待たずに HTTP POST リクエストを実行します。引数として URL とパラメーターの配列が必要です。

以上がPHP はどのようにしてブロックせずに非同期 HTTP リクエストを行うことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート