我必须通过UDP协议查询~10000个游戏服务器,以检查它们是否每15分钟在服务器上联机。我的代码正在运行,但是脱机块线程的服务器极大地降低了进度。我使用20个线程,更多会导致Python的UDP套接字减慢到爬行速度。
目前我在决定服务器处于离线状态之前使用五秒钟超时。这个限制可以进一步降低,还是必须提高?
请不要建议使用心跳,我的服务器是游戏的非官方主人,必须水蛭并且不能接收大部分心跳。
答案 0 :(得分:1)
您不必使用同步通信(即发送数据包,阻止并等待结果),尤其是在使用UDP时。只需要一个线程发出ping,另一个线程不断地在同一个套接字上接收pongs。如果你必须对结果进行复杂的处理,你可能想要使用另一个。
挑战将在发送逻辑中 - 你不想压倒自己的互联网连接,所以我建议一个可配置的数据包速率。此外,UDP数据包可能在网络中丢失,因此在放弃之前至少重发一次或两次。作为暂停时间,我建议大约2秒,因为如果对游戏的ping(即高度延迟敏感)服务器花费的时间比这长,那么它可能无论如何都不可用。