回覆列表
  • 1 # 終究離他93507

    你可以嘗試:

    在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裡.

  • 中秋節和大豐收的關聯?
  • 對白羊女冷淡會怎樣?