ホームページ  >  記事  >  バックエンド開発  >  PHP CURLマルチスレッドリクエストを使用して、すべてのリクエストが完了するのを待ってそれらをまとめて出力するのではなく、リクエストの完了直後に各スレッドが結果を出力するようにするにはどうすればよいですか?

PHP CURLマルチスレッドリクエストを使用して、すべてのリクエストが完了するのを待ってそれらをまとめて出力するのではなく、リクエストの完了直後に各スレッドが結果を出力するようにするにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-09-06 08:57:091370ブラウズ

Webサイトのルートディレクトリにtest.htmlがあり、内容はテキストデモのみです。

リーリー

これはcurl.phpです

リーリー

同時実行数は500に設定されているため、10秒ほど待ってから結果が出力されますが、この待ち時間の間、プログラムは応答しません。
PHP CURLマルチスレッドリクエストを使用して、すべてのリクエストが完了するのを待ってそれらをまとめて出力するのではなく、リクエストの完了直後に各スレッドが結果を出力するようにするにはどうすればよいですか?

私が達成したい効果は、curl スレッドリクエストが完了するたびに、結果をターミナルに即座に出力できることです。デーモン。

PHP CURLマルチスレッドリクエストを使用して、すべてのリクエストが完了するのを待ってそれらをまとめて出力するのではなく、リクエストの完了直後に各スレッドが結果を出力するようにするにはどうすればよいですか?

どのように実装すればよいですか? Php がそれを達成できない場合は、NodeJs と Python ソリューションを使用できます。ありがとうございます

返信内容:

Webサイトのルートディレクトリにtest.htmlがあり、内容はテキストデモのみです。

リーリー

これはcurl.phpです

リーリー

同時実行数は500に設定されているため、10秒ほど待ってから結果が出力されますが、この待ち時間の間、プログラムは応答しません。
PHP CURLマルチスレッドリクエストを使用して、すべてのリクエストが完了するのを待ってそれらをまとめて出力するのではなく、リクエストの完了直後に各スレッドが結果を出力するようにするにはどうすればよいですか?

私が達成したい効果は、curl スレッドリクエストが完了するたびに、結果をターミナルに即座に出力できることです。デーモン。

PHP CURLマルチスレッドリクエストを使用して、すべてのリクエストが完了するのを待ってそれらをまとめて出力するのではなく、リクエストの完了直後に各スレッドが結果を出力するようにするにはどうすればよいですか?

どのように実装すればよいですか? Php で実装できない場合は、NodeJs と Python ソリューションを使用できます。ありがとうございます

nodejsは非同期です

output_buffering がオフになっている場合は、ob_start() と ob_flush() を使用できます。そうでない場合は、コンテンツが少なすぎるため無効になります。ブラウザ経由でアクセスした場合、ブラウザにはまだバッファがあり、小さすぎると効果が見られないため、解決策はありません。以下のテストはコマンドラインでOKです。 ページにini_set権限がない場合は、php.iniに直接アクセスして、output_buffering=0を設定してください
ちなみに、ローカルのphp7テストは500回実行されます。秒、php5.4 では 28 秒かかります。

リーリー

マルチスレッドですが、非同期ではなく同期です。PHPには非同期機能がないようです。

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