そこで、PHP で非同期 Web サービスを作成したいと考えています。なんで?私は素晴らしい非同期フロントエンドを持っていますが、アクティブな TCP 接続が 6 つ以上ある場合、Chrome は私のリクエストをブロックします。もちろん、私は次のようないくつかの同様の質問を読みました:
しかし、これらは私の質問をカバーしていません。
PHPが他のリクエストをブロックしないように、異なるスレッドで複数のリクエストを作成できるようにするためにインストールpthreads
しました(私の状況では、たとえば長いプロセスを開始し、プロセスがまだ忙しいかどうか)。
PHPReact は優れたライブラリ (ノンブロッキング I/O、非同期) のようですが、これも機能しません (まだ同期)。
私は何かが欠けていますか、それともこれはPHPではまだ不可能ですか?
class Example{
private $url;
function __construct($url){
$this->url = $url;
echo 'pooooof request to ' . $this->url . ' sent <br />';
$request = new Request($this->url);
$request->start();
}
}
class Request extends Thread{
private $url;
function __construct($url){
$this->url = $url;
}
function run(){
// execute curl, multi_curl, file_get_contents but every request is sync
}
}
new Example('https://gtmetrix.com/why-is-my-page-slow.html');
new Example('http://php.net/manual/en/function.file-get-contents.php');
new Example('https://www.google.nl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=php%20file%20get%20contents');
理想的な状況は、コールバックを利用することです。
ps。この機能を提供しているいくつかのサーバー (Node.js など) を見てきましたが、私はネイティブ アプローチを好みます。これが不可能な場合は、Python、Java、Scala、または非同期をサポートする他の言語に切り替えることを真剣に考えています。