2015-02-12 70 views
4

我在我的PHP應用程序中使用棘輪(http://socketo.me/)用於websockets。我有多個運行該應用程序的虛擬機,並且這些機器中的每一臺也承載websocket服務。通過HAProxy將請求傳遞給其中一臺虛擬機。目前,用戶還在與應用程序連接的同一節點上使用websocket服務。棘輪多臺服務器

現在我遇到了一個websocket服務器相互討論的問題。 例如:

  • USER1連接到節點1和用戶2連接到節點2
  • 用戶1通過網頁套接字發送的WebSocket消息給用戶2
  • 因爲他被連接到另一個節點
用戶2從未得到此消息

做這種消息的最佳做法是什麼?我有一些想法,但不知道要走什麼路線:

  1. 每個客戶端連接到每個websocket節點。
  2. 服務器發佈消息到所有其他節點以及
  3. 使用數據庫節點

如果新節點連接到雲這兩個第一和第二選項是不是很可擴展性之間的消息同步。第三個選項會導致一些延遲,因爲有必要檢查來自其他節點的消息是否在數據庫循環中。

有沒有其他的選擇來處理這種情況?感謝您的答案!

回答

0

就在幾個音符可能指向人在一個可能的方向:

  • 您可以使用Redis的作爲實現列出了非常快速的數據庫 - RPUSH,LLEN,lrange。這將以驚人的有效方式處理服務器之間的同步。
  • 請勿直接在onMessage處理程序中發送消息,而應將消息直接放入Redis。這樣處理程序超快。
  • 不是讓Ratchet創建自己的循環,而是手動創建一個循環,並在其上添加一個定期計時器,輪詢Redis並向客戶端發送新消息。