我需要通过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打印消息。
答案 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工作