aerofs 團隊今天開源了 ssmp 協定,ssmp 也就是 stupid-simple messaging protocol,裡面包含協定規範,go 實作,java 實作和伺服器加載測試工具。
xmpp 在 aerofs 有一段很長的曆史了,是 aerofs 過去 5 年點對點覆寫網絡的關鍵元件。aerofs 用 xmpp 來發現點,跨 lan 域多點傳播,通過可靠服務作為一個信号頻道來建立點對點連接配接。
一方面,xmpp 可以完成工作。另一方面,xmpp 非常複雜冗長,還有很重的擴充。
ejabberd 可以完美的支援 xmpp 和 xmpp 的各種擴充。非常穩定,但是非常占記憶體,每個使用者常占記憶體大約為 500kb,而我們其他服務的使用者數量在不斷增長。
cpu 使用也是非常高,而 aerofs 團隊希望能有一個低流量的服務。更糟糕的是,有一段時間記憶體洩露非常嚴重,每天要依靠 cron 作業來重新開機一次。
aerofs 在尋找各種解決方案,準備起草一份簡單的規範協定。
像 mqtt 和 stomp 協定都非常不錯,但是還不夠簡單。eventsource 規範已經非常接近目标,而且過去也被驗證是很不錯的。不幸的是,不能允許請求和時間在同一個連接配接上交叉。
最終規範看起來大部分來自流行的基于文本的協定,比如 http,smtp 和 stomp,但是很明顯更小更簡單了,因為有着更短的 abnf 文法:
aerofs 團隊把它命名為 "stupid-simple messaging protocol" (ssmp)。
顧名思義,ssmp 相比其他開放消息協定是非常簡單,非常易懂的。比如消息确認和通配符訂閱。aerofs 團隊主要的設計目标是:
使用 go 編寫的參考實作就是幾個小時就完成了主要的部分,而且可以很快的內建到現有的系統,通過 gockerize 工具
另一個實作使用 java 編寫,現在在 aerofs 桌面用戶端實作。
一點也不意外的是,java 編寫的新伺服器和之前 go 編寫的伺服器一樣:
很明顯,這些改進并不是因為語言的選擇,而是因為更加簡單的設計。但是,從 go 實作的 ssmp 和 java 實作的 ssmp 來看,go 的代碼相對容易維護,可讀性更高。
aerofs 把 ssmp 開源,釋出到社群:
— hugues & the aerofs team.