我正在开发一款名为mope.io的mmo浏览器游戏(该游戏现已发布在https://mope.io) - 我们最近添加了https支持,但已注意到wss websockets存在大量延迟。在我们的许多带有https的游戏服务器上(问题似乎是随机发生在一些服务器上),wss上有几秒钟的延迟,这在ws上是没有见过的。
快速信息:我们的游戏服务器每秒发送10个更新数据包,提供有关游戏中更改内容的信息。
我们通过自己的通配符证书(* .mope.io)为我们的网站使用cloudflare(设置Full:Strict)。我们所有的游戏服务器都有匹配的DNS记录,这些记录属于这个证书(因此websockets可以通过https工作 - 我们连接到例如.wss://server1.mope.io:7020而不是ws://1.2.3.4: 7020)。 游戏服务器使用以下库编写,使用以下库:https://github.com/TooTallNate/Java-WebSocket
关于websockets在wss / tls下执行速度如此之慢的原因的任何想法?当我是唯一连接到服务器的人时,甚至会发生这种情况。非常感谢任何帮助/指导:)
额外信息:我注意到在连接到网站时,第一个https请求的第一个字节为11秒,在cloudflare缓存之前,可能导致此问题!
答案 0 :(得分:0)
我的朋友在他的 Node.js wss游戏服务器中遇到了类似的问题,他怀疑这是DoS攻击。通过快速打开WSS连接,他仅用一台计算机就可以在服务器中重现“冻结”。我不确定这是否只会影响安全的Websocket服务器,还是会影响不安全的服务器。
WS 和 UWS 库上均出现问题。
在 websockets / ws 库中,即使拒绝了verifyClient()
上的连接,也发生了延迟,以防止它进入应用程序自己的连接处理逻辑(这可能是对延迟的合理解释),所以我想知道瓶颈可能在Nodes中用于处理安全连接的套接字中的某处。
我们防止冻结的解决方案是设置具有速率限制的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