(点击
上方公众号
,可快速关注)
来源:鸟窝,
colobu.com/2015/07/14/performance-comparison-of-7-websocket-frameworks/
如有好文章投稿,请点击 → 这里了解详情
前一篇文章《 使用四种框架分别实现百万websocket常连接的服务器 》( http://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/ )介绍了四种websocket框架的测试方法和基本数据。 最近我又使用几个框架实现了websocket push服务器的原型,并专门对这七种实现做了测试。 本文记录了测试结果和一些对结果的分析。
这七种框架是:
-
Netty
-
Undertow
-
Jetty
-
Vert.x
-
Grizzly
-
spray-websocket
-
nodejs-websocket/Node.js
最近用Golang实现了第八种,Go表现还不错。
测试环境
使用三台C3.4xlarge AWS服务器做测试。 一台作为服务器,两台作为客户端机器, 每台客户端机器启动10个client,一共20个client
C3.4xlarge的配置如下:
服务器和客户端机器按照上一篇文章做了基本的优化。
以下是测试的配置数据:
-
20 clients
-
setup rate设为500 * 20 requests/second = 10000 request /second
-
每个client负责建立50000个websocket 连接
-
等1,000,000个websocket建好好,发送一个消息(时间戳)给所有的客户端,客户端根据时间戳计算latency
-
如果服务器setup rate建立很慢,主动停止测试
-
监控三个阶段的性能指标: setup时, setup完成后应用发呆(idle)时,发送消息时
1 Netty
Setup时
-
cpu idle: 90%
-
minor gc: Few
-
full gc: No
Setup完成, 应用Idle时
发送消息时
count = 50000
min = 0
max = 18301
mean = 2446.09
stddev = 3082.11
median = 1214.00
75%
95%
98%
99%
99.9%
2 Vert.x
Setup时
-
cpu idle: 95%
-
minor gc: Few
-
full gc: No
Setup完成, 应用Idle时
发送消息时
count = 50000
min = 49
max = 18949
mean = 10427.00
stddev = 5182.72
median = 10856.00
75%
95%
98%
99%
99.9%
3 Undertow
Setup时
-
cpu idle: 90%
-
minor gc: Few
-
full gc: No
Setup完成, 应用Idle时
发送消息时
-
cpu idle: 65%
-
minor gc: few
-
full gc: No
-
Message latency
count = 50000
min = 1
max = 11948
mean = 1366.86
stddev = 2007.77
median = 412.00
75%
95%
98%
99%
99.9%
4 Jetty
Setup时
当建立360,000左右的websocket时, setup非常的慢, gc频繁,无法继续正常建立websocket, 主动终止测试。
5 Grizzly
Setup时
当建立500,000左右的websocket时, setup非常的慢, gc频繁,无法继续正常建立websocket, 主动终止测试。
6 Spray
Setup时
-
cpu idle: 80%
-
minor gc: Many
-
full gc: No
当建立500,000左右的websocket时, setup非常的慢, gc频繁,无法继续正常建立websocket, 主动终止测试。
7 Node.js
Setup时
Setup完成, 应用Idle时
发送消息时
count = 50000
min = 0
max = 18
mean = 1.27
stddev = 3.08
median = 1.00
75%