近年、インターネット アプリケーションの人気の高まりに伴い、さまざまな同時実行性の高いシナリオがますます一般的になってきています。この場合、従来の同期 I/O 方式では、最新のアプリケーションの高いパフォーマンスと高い同時実行性のニーズを満たすことができなくなります。したがって、コルーチンは広く使用されるソリューションになりました。
Swoole は、高い同時実行性と高いパフォーマンスを実現する PHP ネットワーク通信フレームワークであり、非同期、コルーチン、その他の機能を簡単に実装できます。 swoole_smtp_auth 関数は、SMTP プロトコルを使用して電子メールを送信するときにメールボックスを認証できる、一般的に使用される関数の 1 つです。この記事では、コルーチンを使用して、Swoole で同時実行性の高い swoole_smtp_auth 関数を実装する方法を紹介します。
Swoole コルーチンを使用する前に、Swoole コルーチン ライブラリを導入する必要があります。これは、composer コマンドを通じてインストールできます:
composer require swoole/ide-helper
次の名前空間を PHP コードに導入します:
use SwooleCoroutine; use SwooleCoroutineSocket;
プロトタイプswoole_smtp_auth 関数の内容は次のとおりです。
function swoole_smtp_auth(Socket $sock, string $username, string $password, string $hostname = '');
このうち、$sock は接続されている SMTP サーバーの Socket、$username と $password はそれぞれ電子メール アカウントとパスワードです。この機能の機能は、電子メール アカウントとパスワードが正しいかどうかを確認することです。
次のメソッドを使用して swoole_smtp_auth 関数を実装できます:
function swoole_smtp_auth(Socket $sock, string $username, string $password, string $hostname = '') { $cmd = "AUTH LOGIN "; $sock->send($cmd); $resp = $sock->recv(); if (strpos($resp, '334') !== 0) { throw new Exception("Failed to execute command: $cmd"); } $cmd = base64_encode($username) . " "; $sock->send($cmd); $resp = $sock->recv(); if (strpos($resp, '334') !== 0) { throw new Exception("Failed to execute command: $cmd"); } $cmd = base64_encode($password) . " "; $sock->send($cmd); $resp = $sock->recv(); if (strpos($resp, '235') !== 0) { throw new Exception("Authentication failed"); } return true; }
この関数は、SMTP プロトコルを通じて SMTP サーバーにコマンドを送信し、電子メール アカウントとパスワードを確認します。このうち、$cmd 変数は SMTP プロトコルのコマンド文字列で、$resp 変数は SMTP サーバーから返される応答文字列です。この関数は応答文字列を解析し、検証が成功した場合は true を返し、そうでない場合は例外がスローされます。
Swoole コルーチンを使用する場合、コルーチン スケジューリングを使用して複数のコルーチンを同時に実行できます。次のサンプル コードは、コルーチンを使用して複数の SMTP サーバーを実装し、複数の電子メール アカウントとパスワードを同時に検証する方法を示しています。
$hostnames = ['smtp.gmail.com', 'smtp.qq.com', 'smtp.163.com']; $usernames = ['user1@gmail.com', 'user2@qq.com', 'user3@163.com']; $passwords = ['password1', 'password2', 'password3']; $socks = []; foreach ($hostnames as $host) { $sock = new Socket(AF_INET, SOCK_STREAM, 0); if (!$sock->connect($host, 587)) { throw new Exception("Failed to connect to $host:587"); } swoole_smtp_auth($sock, $username, $password, $host); $socks[] = $sock; } $coros = []; for ($i = 0; $i < count($usernames); $i++) { $coros[] = Coroutine::create(function () use ($socks, $usernames, $passwords, $i) { swoole_smtp_auth($socks[$i % count($socks)], $usernames[$i], $passwords[$i]); }); } Coroutine::wait($coros);
上記のコードでは、まず複数の SMTP 接続を作成し、それらを個別に検証します。次に、コルーチン スケジューリングを使用して複数のコルーチンを開き、各コルーチンで電子メール アカウントとパスワードを検証します。コルーチンを使用すると、プログラム内で複数の SMTP 接続と複数の電子メール アカウントとパスワードを同時に検証できるため、高い同時実行性が実現します。
この記事では、コルーチンを使用して、Swoole で同時実行性の高い swoole_smtp_auth 関数を実装する方法を紹介します。 Swoole コルーチン ライブラリを使用すると、非同期やコルーチンなどの機能を簡単に実装でき、同時実行性の高いアプリケーション シナリオでより優れたパフォーマンス エクスペリエンスを得ることができます。
以上がコルーチンを使用して Swoole で同時実行性の高い swoole_smtp_auth 関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。