首頁>Club>
13
回覆列表
  • 1 # 使用者1910587258423

    先不去管後端用什麼實現,先說架構思路.

    個人建議使用AJAX長輪詢(即HTTP長連線)來實現站內訊息通知.

    因為HTTP協議的相容性比WebSocket好得多.

    伺服器端則可以用PubSub釋出訂閱模式實現即時訊息通知,即:

    使用者瀏覽器發起一個HTTP長連線,訂閱(subscribe)一個使用者頻道.

    系統有訊息產生時,就往這個頻道釋出(publish)一條訊息.

    這個使用者的瀏覽器的HTTP長連線的請求就會返回,把資料帶給使用者.

    其中PubSub釋出訂閱中介軟體可以使用Redis.

    伺服器可以使用傳統的PHP-FPM,或者非同步的Swoole和WorkerMan.

    前端AJAX長輪詢可以這樣寫(基於jQuery):

    後端自然就是使用PHP的Redis客戶端進行PubSub程式設計了.

    區別在於phpredis和predis裡的subscribe訂閱操作是同步阻塞的,會佔用一個PHP程序.

    而Swoole內建的基於hiredis的swoole_redis的subscribe訂閱操作則是非同步非阻塞的,不會阻塞一個PHP程序,但同樣會佔用一個Redis連線.

    Swoole協程實現PubSub釋出訂閱的程式碼參考:

  • 中秋節和大豐收的關聯?
  • 太陽花生長過程?