检查服务器在线的合理超时时间是多少?

4 投票
1 回答
636 浏览
提问于 2025-04-16 20:16

我需要每15分钟通过UDP协议查询大约10000个游戏服务器,看看它们是否在线。我的代码可以正常工作,但那些离线的服务器会阻塞线程,导致进度变得非常缓慢。我现在使用20个线程,如果再多的话,Python的UDP套接字会变得非常慢。

目前我设置了一个五秒的超时,来判断服务器是否离线。这个时间限制可以再缩短吗,还是应该增加呢?


请不要建议使用心跳检测,因为我的服务器是一个非官方的游戏主服务器,它需要从其他地方获取信息,并且大多数心跳信号都收不到。

1 个回答

1

你不一定要使用同步通信(也就是发送数据包后要等待结果),特别是当你使用UDP的时候。你可以让一个线程负责发送请求,另一个线程则一直在同一个连接上接收响应。如果你需要对结果进行复杂处理,可以再开一个线程来处理。

发送数据的逻辑会是一个挑战——你不想让自己的网络连接过载,所以我建议你设置一个可调节的数据包发送速率。此外,UDP的数据包在网络中可能会丢失,所以在放弃之前,至少要重发一到两次。至于超时时间,我建议大约设置为2秒,因为如果向游戏服务器(也就是对延迟非常敏感的服务器)发送请求的时间超过这个,可能就没法用了。

撰写回答