使用netty+spring 写好websocket服务之后,想要看看实际的运行效果,和并发数。网上确实websocket百万并发性能测试,但是没有给出具体的websocket-client 链接方式。这个就很尴尬了,起初我们使用nodejs ws 包,做连接发现在windows上面单台电脑发起的总计链接数量死活超不过2 w。在1.6w左右。这个和系统使用的端口的数有关系。通过netstat查看发现45000后的端口全部被占用了,之前的有没有使用的也不会使用。然后我们把nodejs的脚本放到了linux的测试环境上面。然而~并发数到2.6w之后就无法开启了。如果要到百万并发的话,就得有40台。我的天这么多,怎么可能呢?好在性能测试的文章里面给了一台思路。直接使用虚拟ip。我们在腾讯云上买了10台1c1g的肉鸡用来发起websocket请求。如果你也有这样的想法,还是算了吧。直接上8c16g 两台。1c1g开websocket2w的在半路就被系统直接kill了。加一起也没有两台8c16g不加虚拟ip开到12w多。腾讯云上在内网环境下,选择弹性网卡,点进去详情可以新增内网辅助IP,给每台电脑添加10个辅助IP。加上倒是挺简单的,加好之后怎么用呢?这又是个问题。然后各种百度虚拟IP,IP别名,辅助IP。linux上一个物理网卡是允许多个IP的。对于不同的IP网段,会像有一个链接一样一个一个的连接起来,文章找到了后面我在补上吧。然后每个网段会有一个primary IP,每个primary IP下还会链表一样连着该网段的其他secondly IP。在发起网络请求时,如果不指定源IP系统会默认使用primary IP作为源IP使用。所以我们需要在发起请求的时候指定源IP地址。
由于nodejs性能太低了,或者我们的编写的代码性能太低了,每次链接的耗时很长,所以改用了JAVA+netty的方式做客户端链接加上parallelStream 多核能力的加持在8c16g的肉鸡上启动6w的websocket链接只需要10秒左右。具体如何指定netty链接TCP的时候使用的源地址呢?
DefaultAsyncHttpClientConfig

本文分享了使用Netty和Spring实现WebSocket服务,并挑战百万级并发连接的实际经验。从初试Node.js遇到瓶颈,转战Linux环境,再到利用虚拟IP与高配服务器提升并发数,最终采用Java+Netty方案,结合多核处理能力,在8c16g服务器上实现了6万WebSocket链接的快速搭建。深入探讨了如何指定Netty连接TCP时使用的源地址,及不同技术栈在高并发场景下的表现。
最低0.47元/天 解锁文章
9021

被折叠的 条评论
为什么被折叠?



