最新のリアルタイム アプリケーションでは、メッセージ通知機能が不可欠なコンポーネントになっています。 Redis が提供するパブリッシュおよびサブスクライブ メカニズム (Pub/Sub) を使用すると、サーバーとクライアントはリアルタイムでメッセージを操作できます。 PHP の Swoole コルーチン拡張機能を組み合わせることで、高性能で継続的な監視メッセージ処理および電子メール通知システムを実現できます。
コードを記述する前に、Swoole 拡張機能と Redis 拡張機能が環境にインストールされていることを確認する必要があります。 Linux システムは、次のコマンドを使用してインストールできます。
pecl install swoole
pecl install redis
Windows システムを使用している場合は、PECL 公式 Web サイトにアクセスして、対応する DLL 拡張ファイルを手動でダウンロードしてインストールできます。
Redis メッセージ サブスクリプションを継続的に監視し、電子メール送信をトリガーするために、 notify.phpという名前のスクリプト ファイルを作成します。コード例は次のとおりです。
<?php
require 'vendor/autoload.php';
use Swoole\Coroutine;
use Swoole\Coroutine\Redis;
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->subscribe(['channel'], function ($redis, $channel, $message) {
// メッセージ受信後に電子メール通知を送信する
sendEmail($message);
});
Coroutine::create(function () use ($redis) {
$redis->subscribe(['channel'], function ($redis, $channel, $message) {
// メッセージ受信後に電子メール通知を送信する
sendEmail($message);
});
});
function sendEmail($message) {
// メール送信ライブラリを使用してメールを送信する
// code...
}
Coroutine::create(function () use ($redis) {
while (true) {
$redis->ping();
Coroutine::sleep(5);
}
});
上記のコードでは、まず Redis クライアントをインスタンス化し、Redis サーバーに接続します。 subscribeメソッドを使用して、指定されたチャンネルに登録します。新しいメッセージが監視されると、コールバック関数がトリガーされ、 sendEmail()関数が呼び出されて電子メール通知が送信されます。この機能は、プロジェクトのニーズに応じて、任意のメール送信ライブラリ (PHPMailer、SwiftMailer など) を統合できます。
さらに、Swoole コルーチンを使用すると、プログラムがバックグラウンドでアクティブな状態を維持し、定期的に Redis サーバーと通信して、接続が切断されるのを防ぐことができます。
上記のコードを保存した後、コマンド ラインで次のコマンドを実行して監視を開始します。
php notify.php
このスクリプトは実行を続け、Redis チャネルでメッセージの変更を監視し続け、新しいメッセージを受信すると電子メール通知を自動的に送信します。
PHP の Swoole コルーチンを Redis のパブリッシュおよびサブスクライブ メカニズムと組み合わせることで、リアルタイムのメッセージ監視および電子メール通知システムを効率的に実装できます。このアーキテクチャは、リアルタイム チャット システム、システム警告通知、データ変更プッシュなどのアプリケーション シナリオに特に適しています。非同期タスクの処理ロジックが簡素化されるだけでなく、システムの同時実行パフォーマンスと応答速度も大幅に向上します。