PHP非同期実行に基づく一般的な方法の詳細

2199 ワード

1.クライアントページはAJAX技術を採用してサーバーの長所を要求します:最も簡単で、最も速くて、クライアントに返すHTMLコードの中で、AJAX呼び出しを埋め込んで、あるいは、1つのimgラベルを埋め込んで、srcは実行する時間のかかるスクリプトを指します.
欠点:一般的にAjaxはonLoad以降にトリガーされるべきです.つまり、ユーザーがページを開いた後、閉じると、バックグラウンドスクリプトはトリガーされません.
imgタグを用いると,この方式は厳密な意味での非同期実行とは言えない.ユーザブラウザはphpスクリプトの実行が完了するのを長い間待っていた.すなわち、ユーザブラウザのステータスバーはloadに表示されていた.
もちろん、scriptラベルなど、他の類似の原理の方法も使用できます.
2.popen()関数この関数は、与えられたcommandコマンドを派生して実行されるプロセスを指すパイプを開きます.指定したcommandコマンドを派生して実行されるプロセスへのパイプを開きます.
したがって、呼び出すことはできますが、出力は無視できます.使用コードは次のとおりです.
 
  
pclose(popen("/home/xinchen/backend.php &", 'r'));

利点:最初の方法の欠点を回避し、迅速です.
欠点:この方法はHTTPプロトコルで別のWebServiceを要求することはできず、ローカルのスクリプトファイルしか実行できません.また、一方向に開くしかなく、呼び出されたスクリプトに大量のパラメータを着用することはできません.また,アクセスが高い場合には,大量のプロセスが発生する.外部リソースを使用している場合は、競争を自分で考えなければなりません.
3.CURL拡張CURLは強力なHTTPコマンドラインツールで、POST/GETなどのHTTPリクエストをシミュレートし、データを取得して抽出し、「標準出力」(stdout)に表示することができます.コードは次のとおりです.
 
  
$ch = curl_init();
$curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php',
                            CURLOPT_RETURNTRANSFER, 1,
                            CURLOPT_TIMEOUT, 1,);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);

欠点:問題で説明したように、CURLを使用するにはCUROPT_を設定する必要があります.TIMEOUTは1(最小は1、鬱陶しい)です.つまり、クライアントは少なくとも1秒待たなければならない.
4.fscokopen()関数fsockopenはsocketプログラミングをサポートし、fsockopenを使用してメール送信などのsocketプログラムなどを実現することができ、fcockopenを使用するには自分でheader部分を手動でつなぐ必要がある.
使用例は次のとおりです.
 
  
$fp = fsockopen("www.34ways.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)

";
} else {
    $out = "GET /index.php  / HTTP/1.1\r
";
    $out .= "Host: www.34ways.com\r
";
    $out .= "Connection: Close\r
\r
";
    fwrite($fp, $out);
    /*
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }*/
    fclose($fp);
}

要約すると、fscokopen()関数はあなたの要求を満たすことができるはずです.試してみてもいいです.