https websockets (wss) 上的巨大延迟



我正在开发一款名为 mope.io 的 mmo 浏览器游戏(该游戏在 https://mope.io 年上线) - 我们最近添加了 https 支持,但注意到 wss websockets 存在大量延迟。在我们的许多使用 https 的游戏服务器上(这个问题似乎随机发生在某些服务器上),wss 上有几秒钟的延迟,这在 ws 上是以前从未见过的。

快速信息:我们的游戏服务器每秒发送 10 个更新数据包,提供有关游戏中更改的信息。

我们通过自己的通配符证书 (*.mope.io) 将 cloudflare 用于我们的网站(设置完整:严格)。我们所有的游戏服务器都有匹配的DNS记录,这些记录属于此证书(因此websockets可以通过https工作 - 我们连接到例如 wss://server1.mope.io:7020 而不是 ws://1.2.3.4:7020)。 游戏服务器是用Java编写的,使用以下库:https://github.com/TooTallNate/Java-WebSocket

关于 websockets 在 wss/tls 下执行速度如此之慢的原因的任何想法?当我是唯一连接到服务器的人时,甚至会发生这种情况。任何帮助/指导都非常感谢:)

额外信息:我注意到在 cloudflare 缓存它之前,连接到站点时第一个 https 请求的第一个字节时间为 11 秒,什么可能导致这种情况!?

我的朋友在他的Node.jswss游戏服务器中遇到了类似的问题,他怀疑这是DoS攻击。他设法通过快速打开WSS连接,仅用一台计算机就在他的服务器中重现了"冻结"。我不确定这是否仅影响安全的 websocket 服务器,还是同时影响不安全和安全。

WSUWS库均出现问题。 在websockets/ws库中,即使在拒绝verifyClient()上的连接以防止它进入应用程序自己的连接处理逻辑(这可能是延迟的合理解释)时,也会发生滞后,所以我想知道瓶颈是否在节点底层套接字处理安全连接的东西。

我们防止冻结的解决方案是设置具有速率限制的 iptables。将 1234 替换为您的服务器端口。

sudo iptables -I INPUT -p tcp --dport 1234 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 1234 -m state --state NEW -m recent --update --seconds 1 --hitcount 2 -j DROP

这将允许每个 IP 地址在秒内连接 2 个连接。如有必要,还可以保存iptables,因为它会在系统重新启动时重置。

https://serverfault.com/questions/296838/traffic-filtering-for-websockets

https://debian-administration.org/article/187/Using_iptables_to_rate-limit_incoming_connections

最新更新