请问WebSocket的实时通信监控系统设计与实现要怎么实现?
你可以尝试:
在WebSocket事件如message的回调函数里用$serv->send($fd_TCP, $json)发送消息给TCP连接.
在TCP事件如receive的回调函数里用$serv->push($fd_ws, $json)推送消息给WebSocket连接.
上述操作在单机上可能可行,但在多机分布式上不可用.
所以可以考虑使用一个中间件作为跨服务器/跨协议通信的介质.
比如Redis提供的PubSub消息发布订阅功能就是一个简单易用的消息传递的中间件.
工作流程如下:
WebSocket连接建立时,用Swoole内置的Redis客户端异步订阅(subscribe)一个频道,频道名为:
swoole:user:1:channel
其中1表示连接所属的用户编号(保证唯一).
TCP连接建立时,同样也用Swoole内置的Redis客户端异步订阅(subscribe)一个频道,频道名为:
swoole:user:2:channel
两个不同协议的连接通信时,就是发布(publish)信息到指定频道:
$swoole_redis->publish($user_channel, $json);
而处理收到信息的逻辑则写在订阅(subscribe)操作的回调函数message里.