AeroFS 开源 SSMP 协议,包含 Java 和 Go 实现

oschina
 oschina
发布于 2015年09月11日
收藏 59

AeroFS 团队今天开源了 SSMP 协议,SSMP 也就是 Stupid-Simple Messaging Protocol,里面包含协议规范,Go 实现,Java 实现和服务器加载测试工具。

XMPP 历史

XMPP 在  AeroFS 有一段很长的历史了,是 AeroFS 过去 5 年点对点覆盖网络的关键组件。AeroFS 用 XMPP 来发现点,跨 LAN 域多播,通过可靠服务作为一个信号频道来建立点对点连接。

一方面,XMPP 可以完成工作。另一方面,XMPP 非常复杂冗长,还有很重的扩展

ejabberd 可以完美的支持 XMPP 和 XMPP 的各种扩展。非常稳定,但是非常占内存,每个用户常占内存大约为 500kB,而我们其他服务的用户数量在不断增长。

CPU 使用也是非常高,而 AeroFS 团队希望能有一个低流量的服务。更糟糕的是,有一段时间内存泄露非常严重,每天要依靠 cron 作业来重启一次。

SSMP 产生

AeroFS 在寻找各种解决方案,准备起草一份简单的规范协议。

MQTTSTOMP 协议都非常不错,但是还不够简单。EventSource 规范已经非常接近目标,而且过去也被验证是很不错的。不幸的是,不能允许请求和时间在同一个连接上交叉。

最终规范看起来大部分来自流行的基于文本的协议,比如 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 相比其他开放消息协议是非常简单,非常易懂的。比如消息确认和通配符订阅。AeroFS 团队主要的设计目标是:

  • 基于文本,容易调试

  • 单个连接中可以交叉 请求/应答 和服务器事件

  • 足够简单,在几小时内可以使用任何一种编程语言编写简单但是完整高效的客户端或者服务器

使用 Go 编写的参考实现就是几个小时就完成了主要的部分,而且可以很快的集成到现有的系统,通过 gockerize 工具

另一个实现使用 Java 编写,现在在 AeroFS 桌面客户端实现。

SSMP 成果

一点也不意外的是,Java 编写的新服务器和之前 Go 编写的服务器一样:

  • 更小,代码更容易维护

  • 降低内存占用

  • 降低磁盘占用

  • 降低 CPU 使用

很明显,这些改进并不是因为语言的选择,而是因为更加简单的设计。但是,从 Go 实现的 SSMP 和 Java 实现的 SSMP 来看,Go 的代码相对容易维护,可读性更高。

SSMP 开源

AeroFS 把 SSMP 开源,发布到社区:

— Hugues & the AeroFS Team.

via aerofs.com

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:AeroFS 开源 SSMP 协议,包含 Java 和 Go 实现
加载中

最新评论(6

李嘉图
李嘉图

引用来自“xiaolei123”的评论

==、要Java8、、、谁能改成Java6也能用啊??、求修改。。。
哈哈,刚才才把自己的JDK从8u20,升级到8u60,感觉很好.
李嘉图
李嘉图
xmpp的升级版,很好,谢谢楼主了.
戴的天
戴的天
很好
__JM_Joy__
__JM_Joy__
看我大GO多火
xiaolei123
xiaolei123
==、要Java8、、、谁能改成Java6也能用啊??、求修改。。。
Ethan_-
Ethan_-
等会起床弄弄看。
返回顶部
顶部