具有容錯和持久消息儲存的 Websockets 伺服器
我開始嘗試使用 websockets。
有誰知道提供 websocket“通道”的持久儲存的 websockets 伺服器(開源或付費)?我發現的所有範例都沒有解決持久性問題——如果 websockets 伺服器出現故障,所有“通道”數據都會失去。
Pusher 等服務並沒有真正討論它們是否解決了耐用性問題(而且我還沒有收到技術支持的回复)。
很高興自己動手,但寧願不重新發明輪子。
編輯:
我不是在尋找 websockets 101 資訊。這是很容易獲得和理解的。
我正在尋找支持 websockets 並具有 websocket 數據持久儲存的伺服器(開源或付費),以便在伺服器發生故障時,新伺服器可以接管原始伺服器中斷的位置。
兩個主要目的:
- 支持 websockets 網路工作組設想的故障轉移方案https://datatracker.ietf.org/doc/html/draft-ibc-websocket-dns-srv-02#section-5.1(最重要的是,當客戶端連接到故障轉移伺服器)
- 支持新訂閱者必須接收所有過去發布的消息的場景。
當然這可以在應用層處理……但這不是我想要的。
編輯
因此,經過一些研究,以下已安裝的選項似乎是最強大的:
- 卡贊遷徙
- 遷移(http://migrator.ro)
看起來“真實”的託管服務
- Pusher(很棒的 API,但還沒有歷史功能)
- 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 是框架架構和開發的正確位置。