如何提高WebSocket吞吐量

时间:2016-03-23 11:14:40

标签: java performance websocket vert.x java-websocket

我需要通过Web套接字从许多连接到java服务器的客户端提取数据。

有很多Web套接字实现,我选择了vert.x. 我做了一个简单的演示,我在那里听json的文本框架,用jackson解析它们并发回响应。 Json解析器对吞吐量没有显着影响。

我的总体速度为每秒2.5k,有2或10个客户端。

然后我尝试使用缓冲,客户端不等待每一个响应,但在服务器确认后发送一批消息(30k-90k) - 速度提高到每秒8k。

我看到java进程有一个CPU瓶颈 - 100%使用1个核心。 同时nodejs客户端cpu消耗仅为5%。 即使是一个客户端也会导致服务器吃掉几乎整个核心。

你觉得尝试像jetty这样的其他websocket实现是否值得? 有没有办法用多个核心缩放vert.x?

我将日志级别从调试更改为信息后,我有70k。调试级别导致每帧的vert.x打印消息。

2 个答案:

答案 0 :(得分:0)

可以通过例如指定Verticle(线程)实例的数量。配置DeploymentOptions http://vertx.io/docs/vertx-core/java/#_specifying_number_of_verticle_instances

您可以在一台计算机上创建超过60k的连接,因此我假设连接的平均时间不到一秒。你期望在生产中出现这种情况吗?要比较其他解决方案,您可以尝试运行https://github.com/smallnest/C1000K-Servers

答案 1 :(得分:0)

听起来不对劲。这是非常低的性能。听起来像vert.x没有正确配置并行化。你只使用一个Verticle(线程)吗?

Kaazing Gateway是最早的WS实现之一。默认情况下,它使用多个核心,并且可以使用线程等进一步配置。我们有用户将其用于大规模物联网部署,因此您的问题不是JVM。 如果你有兴趣,这里是github回购:https://github.com/kaazing/gateway

完全披露:我为Kaazing工作