Failover

具有容錯和持久消息儲存的 Websockets 伺服器

  • November 12, 2012

我開始嘗試使用 websockets。

有誰知道提供 websocket“通道”的持久儲存的 websockets 伺服器(開源或付費)?我發現的所有範例都沒有解決持久性問題——如果 websockets 伺服器出現故障,所有“通道”數據都會失去。

Pusher 等服務並沒有真正討論它們是否解決了耐用性問題(而且我還沒有收到技術支持的回复)。

很高興自己動手,但寧願不重新發明輪子。

編輯:

我不是在尋找 websockets 101 資訊。這是很容易獲得和理解的。

我正在尋找支持 websockets 並具有 websocket 數據持久儲存的伺服器(開源或付費),以便在伺服器發生故障時,新伺服器可以接管原始伺服器中斷的位置。

兩個主要目的:

  1. 支持 websockets 網路工作組設想的故障轉移方案https://datatracker.ietf.org/doc/html/draft-ibc-websocket-dns-srv-02#section-5.1(最重要的是,當客戶端連接到故障轉移伺服器)
  2. 支持新訂閱者必須接收所有過去發布的消息的場景。

當然這可以在應用層處理……但這不是我想要的。

編輯

因此,經過一些研究,以下已安裝的選項似乎是最強大的:

看起來“真實”的託管服務

  • Pusher(很棒的 AP​​I,但還沒有歷史功能)
  • PubNub(有歷史)

如果 websocket 不可用,上述所有服務都可以優雅地回退到其他通信方法。

我找不到任何提供“開箱即用”集群、故障轉移和持久消息儲存來回放歷史的開源。有一些項目可以作為很好的起點,但不完全是我想要的。

Hornetq 是一個通用的消息代理,支持 JMS、STOMP 和 Websockets+Stomp。它提供了消息的持久性以及許多其他功能。

通道數據是什麼意思?

處理數據應該是在伺服器中執行的應用程序的職責(想想 LAMP)。

試想一下,當您使用一個發佈到自身的表單創建一個 HTML 文件並將其放入一個普通的 apache 中時,會保存多少數據。每次請求後,所有“表單數據”都會失去。

編輯:

你走錯了路。

Websockets 與持久性或持久性沒有任何關係,SMTP、HTTP 或 IMAP 也沒有。這只是一個運輸描述。(見鬼,甚至 syslog 都沒有談論 RFC 中的持久性)

我不知道您在尋找什麼,但我很確定這不是 websocket 發送或接收的字節的持久性,而是在發送字節後構造的數據的持久性。

這個問題已經解決了好幾次了,我只參考標準的 RDBMS 框架:

  • 休眠(Java)
  • SQLAlchemy (python)
  • 活動記錄(紅寶石)

如果你只發送 JSON,你也可以使用一些非關係儲存,如 Riak、Redis、MongoDB、CouchDB。

當然,您可以自行解析數據並從中創建適合您設置的內容。我不想這麼說,但是在不知道其含義的情況下保存通過 websocket 發送的內容與獲取 tcpdump 然後使用 ed 讀取它幾乎相同。

我可以建議將這個問題遷移到 stackoverflow 我不認為 serverfault 是框架架構和開發的正確位置。

引用自:https://serverfault.com/questions/281988