ホームページ  >  記事  >  バックエンド開発  >  PHP での非同期実行の 4 つの一般的な方法

PHP での非同期実行の 4 つの一般的な方法

WBOY
WBOYオリジナル
2016-07-29 09:09:16734ブラウズ

この記事では、php の非同期呼び出しメソッド について説明し、参考として共有します。具体的な内容は次のとおりです。クライアントとサーバーは HTTP プロトコルを通じて通信し、サーバーはリクエストの後に処理を実行します。リクエストを受け取り、処理結果を返します。
サーバーは時間のかかる操作を実行する必要がある場合がありますが、この操作の結果をクライアントに返す必要はありません。ただし、PHP は同期的に実行されるため、クライアントは次のステップに進む前にサービスが処理されるまで待つ必要があります。
したがって、時間のかかる操作は非同期実行に適しています。サーバーはリクエストを受信した後、クライアントが必要とするデータを処理した後に戻り、時間のかかる操作をサーバー上で非同期に実行します。
1. Ajaxとimgタグを使用する
原則として、サーバーから返されるHTMLにAjaxコードまたはimgタグを挿入し、imgのsrcが実行する必要があるプログラムです。

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

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

2. Popen を使用します

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

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

利点: 高速実行
欠点:

  • 1) これでのみ実行できます。マシン
  • 2) 大量のパラメータを渡すことはできません
  • 3) トラフィックが多いときは、多くのプロセスが作成されます
3。curl タイムアウト CURLOPT_TIMEOUT を 1 に設定します。 (最小値は 1) なので、クライアントは 1 秒待つ必要があります



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

4. fsockopen

fsockopen を使用するのが最善です。欠点は、ヘッダー部分を自分で接続する必要があることです。



<&#63;php 
   
$url = 'http://www.example.com/doRequest.php'; 
$param = array( 
  'name'=>'fdipzone', 
  'gender'=>'male', 
  'age'=>30 
); 
   
doRequest($url, $param); 
   
function doRequest($url, $param=array()){ 
   
  $urlinfo = parse_url($url); 
   
  $host = $urlinfo['host']; 
  $path = $urlinfo['path']; 
  $query = isset($param)? http_build_query($param) : ''; 
   
  $port = 80; 
  $errno = 0; 
  $errstr = ''; 
  $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);    // 设置执行不超时

を追加する必要があります。上記は

php 非同期呼び出しメソッドです

詳細な紹介、皆様の学習に役立つことを願っています。 上記では、PHP の非同期実行の 4 つの一般的な方法と、関連する内容を紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

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