AeroFS 开源 SSMP 协议,包含 Java 和 Go 实现
AeroFS 團隊今天開源了 SSMP 協(xié)議,SSMP 也就是 Stupid-Simple Messaging Protocol,里面包含協(xié)議規(guī)范,Go 實現(xiàn),Java 實現(xiàn)和服務(wù)器加載測試工具。
XMPP 歷史
XMPP 在 AeroFS 有一段很長的歷史了,是 AeroFS 過去 5 年點對點覆蓋網(wǎng)絡(luò)的關(guān)鍵組件。AeroFS 用 XMPP 來發(fā)現(xiàn)點,跨 LAN 域多播,通過可靠服務(wù)作為一個信號頻道來建立點對點連接。
一方面,XMPP 可以完成工作。另一方面,XMPP 非常復(fù)雜冗長,還有很重的擴展。
ejabberd 可以完美的支持 XMPP 和 XMPP 的各種擴展。非常穩(wěn)定,但是非常占內(nèi)存,每個用戶常占內(nèi)存大約為 500kB,而我們其他服務(wù)的用戶數(shù)量在不斷增長。
CPU 使用也是非常高,而 AeroFS 團隊希望能有一個低流量的服務(wù)。更糟糕的是,有一段時間內(nèi)存泄露非常嚴(yán)重,每天要依靠 cron 作業(yè)來重啟一次。
SSMP 產(chǎn)生
AeroFS 在尋找各種解決方案,準(zhǔn)備起草一份簡單的規(guī)范協(xié)議。
像 MQTT 和 STOMP 協(xié)議都非常不錯,但是還不夠簡單。EventSource 規(guī)范已經(jīng)非常接近目標(biāo),而且過去也被驗證是很不錯的。不幸的是,不能允許請求和時間在同一個連接上交叉。
最終規(guī)范看起來大部分來自流行的基于文本的協(xié)議,比如 HTTP,SMTP 和 STOMP,但是很明顯更小更簡單了,因為有著更短的 ABNF 語法:
message = ( request | response | event ) LF request = "LOGIN" SP id SP id [ SP payload ]| "CLOSE"| "PING"| "PONG"| forwardable response = code [ SP payload ] event = "000" SP id SP ( forwardable | "PING" | "PONG" ) forwardable = "SUBSCRIBE" SP id [ SP "PRESENCE" ]| "UNSUBSCRIBE" SP id| "UCAST" SP id SP payload| "MCAST" SP id SP payload| "BCAST" SP payload| compat compat = verb [ SP id ] [ SP payload ] code = 3DIGIT verb = 1*UPALPHA id = 1*ID payload = 1*PAYLOAD ID = UPALPHA | LOALPHA | DIGIT| "." | ":" | "@" | "/" | "_" | "-" | "+" | "=" | "~" PAYLOAD = <any 8-bit value, except US-ASCII LF> UPALPHA = <any US-ASCII uppercase letter "A".."Z"> LOALPHA = <any US-ASCII lowercase letter "a".."z"> DIGIT = <any US-ASCII digit "0".."9"> SP = <US-ASCII SP, space (32)> LF = <US-ASCII LF, linefeed (10)>AeroFS 團隊把它命名為 "Stupid-Simple Messaging Protocol" (SSMP)。
顧名思義,SSMP 相比其他開放消息協(xié)議是非常簡單,非常易懂的。比如消息確認(rèn)和通配符訂閱。AeroFS 團隊主要的設(shè)計目標(biāo)是:
基于文本,容易調(diào)試單個連接中可以交叉 請求/應(yīng)答 和服務(wù)器事件足夠簡單,在幾小時內(nèi)可以使用任何一種編程語言編寫簡單但是完整高效的客戶端或者服務(wù)器使用 Go 編寫的參考實現(xiàn)就是幾個小時就完成了主要的部分,而且可以很快的集成到現(xiàn)有的系統(tǒng),通過 gockerize 工具
另一個實現(xiàn)使用 Java 編寫,現(xiàn)在在 AeroFS 桌面客戶端實現(xiàn)。
SSMP 成果
一點也不意外的是,Java 編寫的新服務(wù)器和之前 Go 編寫的服務(wù)器一樣:
更小,代碼更容易維護降低內(nèi)存占用降低磁盤占用降低 CPU 使用很明顯,這些改進并不是因為語言的選擇,而是因為更加簡單的設(shè)計。但是,從 Go 實現(xiàn)的 SSMP 和 Java 實現(xiàn)的 SSMP 來看,Go 的代碼相對容易維護,可讀性更高。
SSMP 開源
AeroFS 把 SSMP 開源,發(fā)布到社區(qū):
協(xié)議規(guī)范lipwig,使用 Go 實現(xiàn)的手冊基于 Netty 的另一種 Java 實現(xiàn)Go 編寫的服務(wù)器加載測試工具— Hugues & the AeroFS Team.
文章轉(zhuǎn)載自 開源中國社區(qū)[https://www.oschina.net]
總結(jié)
以上是生活随笔為你收集整理的AeroFS 开源 SSMP 协议,包含 Java 和 Go 实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。