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

藏色散人
リリース: 2023-04-07 22:38:01
転載
3302 人が閲覧しました

この記事では、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). トラフィックが集中すると多くのプロセスが作成されますhigh

3.curl を使用します

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 を使用する

#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);    // 设置执行不超时
ログイン後にコピー
を追加する必要があります。PHP 関連の知識について詳しくは、こちらをご覧ください。

PHP チュートリアル にアクセスしてください!

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

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!