請問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里.