PHP的redis扩展是阻塞IO。当使用订阅/发布模式时,整个过程将被阻塞。所以必须使用Swoole\Redis异步客户端来实现。示例代码$server=newswoole_websocket_server("0.0.0.0",9501);$server->on('workerStart',function($server,$workerId){$client=newswoole_redis;$client->on('message',function(swoole_redis$client,$result)use($server){如果($result[0]=='message'){foreach($server->connectionsas$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)创建Swoole\Redis客户端。连接Redis服务器成功后,订阅msg_0主题的消息。当有新消息时,Swoole\Redis会触发onMessage事件回调。在这个回调函数中使用$server->connections遍历服务器的所有连接并发送消息
