ホームページ >バックエンド開発 >PHPチュートリアル >PHP での非同期実行のいくつかの一般的な方法

PHP での非同期実行のいくつかの一般的な方法

*文
*文オリジナル
2018-05-29 10:56:2816091ブラウズ

この記事では主に、PHP の非同期呼び出しメソッドをよりよく分析し、それらを習得するのに役立つ 4 つの一般的な PHP 非同期実行方法を紹介します。興味のある方は参考にしてください。お役に立てれば幸いです。

この記事では、phpの非同期呼び出しメソッドについて説明し、参考のために共有します。クライアントとサーバーはHTTPプロトコルを通じて通信します。クライアントはリクエストを開始し、サーバーは受信します。その後、処理を実行し、処理結果を返します。
サーバーは時間のかかる操作を実行する必要がある場合がありますが、この操作の結果をクライアントに返す必要はありません。ただし、PHP は同期的に実行されるため、クライアントは次のステップに進む前にサービスが処理されるまで待つ必要があります。
したがって、時間のかかる操作は非同期実行に適しています。サーバーはリクエストを受信した後、クライアントが必要とするデータを処理した後に戻り、時間のかかる操作をサーバー上で非同期に実行します。

1. Ajaxとimgタグを使用する
原則として、サーバーから返されるHTMLにAjaxコードまたはimgタグを挿入し、imgのsrcが実行する必要があるプログラムです。

利点: 実装が簡単で、サーバーは呼び出しを実行する必要がありません
欠点: 実行中、ブラウザは常に読み込み状態になるため、このメソッドは真の非同期呼び出しではありません。

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">

2. Popen を使用します
Popen を使用してコマンドを実行します。構文:

// popen — 打开进程文件指针  
resource popen ( string $command , string $mode )
pclose(popen(&#39;php /home/fdipzone/doRequest.php &&#39;, &#39;r&#39;));

利点: 高速実行
欠点:

  • 1) このマシンのみ。

  • 2) を実行します。

  • 3) トラフィックが多い場合、多くのプロセスが作成されます。 CURL タイムアウト CURLOPT_TIMEOUT を 1 (最小値は 1) に設定すると、クライアントは 1 秒待機する必要があります

    <?php 
    $ch = curl_init(); 
    $curl_opt = array( 
      CURLOPT_URL, &#39;http://www.example.com/doRequest.php&#39;
      CURLOPT_RETURNTRANSFER,1, 
      CURLOPT_TIMEOUT,1 
    ); 
    curl_setopt_array($ch, $curl_opt); 
    curl_exec($ch); 
    curl_close($ch); 
    ?>

    4. fsockopen を使用するのが最善ですが、ヘッダー部分を自分で結合する必要があるという欠点があります。 。
  • <?php 
       
    $url = &#39;http://www.example.com/doRequest.php&#39;; 
    $param = array( 
      &#39;name&#39;=>&#39;fdipzone&#39;, 
      &#39;gender&#39;=>&#39;male&#39;, 
      &#39;age&#39;=>30 
    ); 
       
    doRequest($url, $param); 
       
    function doRequest($url, $param=array()){ 
       
      $urlinfo = parse_url($url); 
       
      $host = $urlinfo[&#39;host&#39;]; 
      $path = $urlinfo[&#39;path&#39;]; 
      $query = isset($param)? http_build_query($param) : &#39;&#39;; 
       
      $port = 80; 
      $errno = 0; 
      $errstr = &#39;&#39;; 
      $timeout = 10; 
       
      $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 
       
      $out = "POST ".$path." HTTP/1.1\r\n"; 
      $out .= "host:".$host."\r\n"; 
      $out .= "content-length:".strlen($query)."\r\n"; 
      $out .= "content-type:application/x-www-form-urlencoded\r\n"; 
      $out .= "connection:close\r\n\r\n"; 
      $out .= $query; 
       
      fputs($fp, $out); 
      fclose($fp); 
    } 
       
    ?>
注: 実行プロセス中にクライアント接続が切断されたり、接続がタイムアウトになったりすると、実行が不完全になる可能性があるため、

ignore_user_abort(true); // 忽略客户端断开 
set_time_limit(0);    // 设置执行不超时

関連の推奨事項:


Swoole Share を使用した非同期 Web クローリングを追加する必要があります。

thinkphp5とswooleはSMTPメソッドを使用して非同期大量メール送信の例を実装します

Swoole開発の要点紹介

以上がPHP での非同期実行のいくつかの一般的な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。