メールを一括送信する場合、送信結果を取得する必要があるため、リクエスト結果を待つ必要があります。
phpでインターフェースを非同期にリクエストしてデータを取得し、コールバック関数を実行する方法はありますか?
現在は同期リクエスト インターフェイスなので待機しますが、非常に時間がかかります。 。また、実行中にサーバーの CPU が増加します。 。
教えてください
ここでの重要な点は、リクエストの戻りを待たず、戻りがあるときに特定のコードを直接呼び出すことです。リクエストは非常に遅いからです。 。 Redis キューはすでに使用されており、スクリプトが実行中です
php はマルチスレッド拡張機能をインストールします。自分で拡張することで実現でき、jsもシングルスレッドで実装されます。
これらのライブラリを使用して、非同期タスクを実行してみることができます
reactphp
,workerman
,swoole
これはphpに付属するcurl_multiで実現できます
fsockopen を使用する場合、これは非同期に送信されるだけで、返されません。もちろん、swoole を使用することもできますが、これには C が含まれています。 language 、一部のエラー メッセージは C からのものです。 C を知っている場合は、これも使用できます。 Workerman を使い始めるのは非常に簡単です。具体的な実装ロジックは次のとおりです。
非同期にする必要がある場合は、Workerman を直接呼び出してロジックを実行します。
Workerman がロジックを実行した後、タスク タスクを非同期で呼び出します。ワーカーマンの非同期。労働者は直接戻ります。
タスクが完了すると、タスクはワーカーマンに渡され、ワーカーマンが非同期ロジックを実行します。
PHP 非同期通信を備えたバックアップ フレームワークを提供します
github-php-awesome を翻訳しました
キュー
1. 送信する必要がある情報を Redis またはその他のメモリ キャッシュに保存します。
2.php は、キー トークンへのアクセスを必要とするインターフェイスを提供します。このインターフェイスは、redis にキャッシュされた電子メール データをループして送信します。
3. Windows と Linux の両方でスケジュールされたタスクを使用するための解決策があります。定期的に http にアクセスしてこの php インターフェイスをリクエストし、送信を完了します。非同期と同等です。