Die Redis-Erweiterung von PHP blockiert E/A. Bei Verwendung des Abonnement-/Veröffentlichungsmodus wird der gesamte Prozess blockiert. Daher muss es mit dem asynchronen SwooleRedis-Client implementiert werden.
Beispielcode
$server = new swoole_websocket_server("0.0.0.0", 9501); $server->on('workerStart', function ($server, $workerId) { $client = new swoole_redis; $client->on('message', function (swoole_redis $client, $result) use ($server) { if ($result[0] == 'message') { foreach($server->connections as $fd) { $server->push($fd, $result[1]); } } }); $client->connect('127.0.0.1', 6379, function (swoole_redis $client, $result) { $client->subscribe('msg_0'); }); }); $server->on('open', function ($server, $request) { }); $server->on('message', function (swoole_websocket_server $server, $frame) { $server->push($frame->fd, "hello"); }); $server->on('close', function ($serv, $fd) { }); $server->start();
Implementierungsprozess
Der SwooleRedis-Client wird erstellt, wenn der Prozess startet (onWorkerStart) und mit verbunden Redis-Server
Nachdem die Verbindung erfolgreich hergestellt wurde, abonnieren Sie die Nachricht des Themas msg_0
Wenn eine neue Nachricht vorliegt, löst SwooleRedis den Rückruf des onMessage-Ereignisses aus
Verwenden Sie $server in dieser Rückruffunktion ->Verbindungen durchlaufen alle Verbindungen auf dem Server und senden Nachrichten
Verwandte Empfehlungen: „rEDIS-Tutorial“
Das obige ist der detaillierte Inhalt vonImplementieren Sie Abonnementnachrichten von Redis und leiten Sie sie an den WebSocket-Client weiter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!