设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

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

2015-9-11 21:50| 发布者: joejoe0332| 查看: 1866| 评论: 0|原作者: oschina|来自: oschina

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

  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 在寻找各种解决方案,准备起草一份简单的规范协议。


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


  最终规范看起来大部分来自流行的基于文本的协议,比如 HTTP,SMTP 和 STOMP,但是很明显更小更简单了,因为有着更短的 ABNF 语法:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部