PHP의 redis 확장 프로그램이 IO를 차단하고 있습니다. 구독/게시 모드를 사용하면 전체 프로세스가 차단됩니다. 따라서 SwooleRedis 비동기 클라이언트를 사용하여 구현해야 합니다.
예제 코드
$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();
구현 프로세스
프로세스가 시작되면(onWorkerStart) SwooleRedis 클라이언트를 생성하고 Redis 서버에 연결합니다.
연결에 성공한 후 msg_0 주제의 메시지를 구독하세요
When 새로운 메시지가 있습니다. SwooleRedis가 onMessage 이벤트 콜백을 트리거할 때
이 콜백 함수에서 $server->connections를 사용하여 서버의 모든 연결을 순회하고 메시지를 보냅니다
관련 권장 사항: "redis tutorial "
위 내용은 Redis에서 구독 메시지를 구현하고 이를 WebSocket 클라이언트에 전달합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!