ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してメソッドを非同期に呼び出す方法

PHPを使用してメソッドを非同期に呼び出す方法

jacklove
jackloveオリジナル
2018-06-09 14:21:532096ブラウズ

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

クライアントとサーバーは HTTP プロトコルを通じて通信し、サーバーはそれを受け取ります。リクエスト後の処理と処理結果の返却。

サーバーは時間のかかる操作を実行する必要があり、この操作の結果をクライアントに返す必要がない場合があります。ただし、PHP は同期的に実行されるため、クライアントは次のステップに進む前にサービスが処理されるまで待つ必要があります。

したがって、時間のかかる操作は非同期実行に適しています。サーバーはリクエストを受信した後、クライアントが必要とするデータを処理してから戻り、時間のかかる操作を実行します。サーバー上で非同期的に操作を実行します。

1. Ajax と img タグを使用する

原則、サーバーreturns Ajax コードまたは img タグを html に挿入します。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. アクセス数が多いと多くのプロセスが作成されます。

#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);       // 设置执行不超时
# を追加する必要があります。

##Tips:

fsockopen

の導入と使い方については、以前に書いた「php」を参照してください。 fsockopen GET/POST を使用してフォームを送信し、ファイルをアップロードする」および「PHP HTTP リクエスト クラス、GET、POST、Multipart/form-data をサポートする」 この記事では、PHP の非同期呼び出しメソッドの使用方法について説明します。詳細 関連コンテンツについては、php 中国語 Web サイトに注目してください。 関連する推奨事項: php 文字列圧縮方法の比較について

php タイマー ページの実行時間の監視についてクラス

##さまざまな数のパラメータをサポートする PHP コンストラクターのメソッドの紹介

#

以上がPHPを使用してメソッドを非同期に呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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