>  기사  >  데이터 베이스  >  Redis에서 구독 메시지를 구현하고 이를 WebSocket 클라이언트에 전달합니다.

Redis에서 구독 메시지를 구현하고 이를 WebSocket 클라이언트에 전달합니다.

藏色散人
藏色散人앞으로
2020-06-13 16:08:222836검색

Redis에서 구독 메시지를 구현하고 이를 WebSocket 클라이언트에 전달합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제