gpt4 book ai didi

ruby - 如何有效地轮询大量服务器?

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:32 25 4
gpt4 key购买 nike

我正在寻找一种通过 TCP 轮询大量服务器状态的好方法。我目前正在使用同步代码和 Minecraft 查询协议(protocol),但每当服务器离线时,队列的其余部分就会被阻止。

我当前代码遇到的另一个问题是,某些服务器倾向于阻止我在其防火墙中用于轮询的服务器,因此它们的服务器在我的服务器列表中显示为离线。

我正在使用带有无限循环的 Ruby rake 任务,其中我的 MongoDB 数据库中的每个 Minecraft 服务器每 +- 10 分钟检查和更新一次(我尝试通过让循环休眠 (600/s.count.to_i).ceil 秒。

有什么方法可以有效地完成这项任务(并防止服务器在其防火墙中将我的 IP 列入黑名单),最好是使用 Ruby 中的异步代码?

最佳答案

您需要使用非阻塞套接字来检查 - 多线程。最好的办法是一次生成多个线程以同时检查多个服务器 - 这样您的主线程就不会被阻塞。

This question包含很多关于 Ruby 中多线程的信息——你应该能够同时产生多个并发线程,或者至少使用非阻塞套接字。

@Lie Ryan给的另外一点,可以用IO.Select一次轮询一组服务器。完成后它将返回一组“在线”服务器 - 这可能比产生多个线程更优雅。

关于ruby - 如何有效地轮询大量服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com