實現從Redis中訂閱消息轉發到 WebSocket 客戶端

實現從Redis中訂閱消息轉發到 WebSocket 客戶端

phpredis擴展是阻塞式 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主題的消息

當有新的message時,SwooleRedis會觸發onMessage事件回調

在這個回調函數中使用$server->connections遍歷服務器所有的連接,發送消息

相關推薦:《redis教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享