上下文:主服务器(Java,TCP)监控托管游戏列表(主服务器和每个托管游戏服务器的不同机器)。任何用户都可以在他的PC上托管游戏。托管游戏可以持续数周或数月。
需要:了解托管游戏服务器何时关闭或无法再访问。
限制1:无法依赖托管服务器的“离线更新消息”,因为这些消息可能永远不会到达(断电,互联网链接切断等)
限制2:我不确定TCP的内置keep-alive,因为它意味着每个托管服务器都有一个24/7开放套接字(如果我错了,请纠正我)
有什么想法吗?
答案 0 :(得分:3)
考虑使用某种心跳消息。那些消息(“我还活着!”)会定期发送,如果主服务器没有从托管服务器获取心跳消息(一段时间),它就知道这个托管服务器不可用。
如果您需要托管服务器的更多详细信息(例如“完全可操作”,“在5分钟内进行维护”等),您甚至可以为此消息添加一些状态参数。
答案 1 :(得分:1)
听起来你正在遇到所谓的“双军问题”,“协调攻击问题,或者,正如安德烈亚斯D所说,Two General's Problem你已经确定为你的限制1这个问题背后的想法是两支军队想要协调对敌人的攻击。他们需要同时进行攻击,因为每个军队都知道如果他们自己攻击就会死亡。
问题在于:一支军队如何知道他们的信使,他们正在携带用于协同攻击的时间,已成功抵达另一支军队?此外,第二军如何确定第一支军队知道他们收到了消息并计划进攻?军队之间的任何信息都可能无法成功到达,因此军队无法确定它们是否正确协调。
因此,最简单的答案可能是在预定的时间间隔内对每个正在运行的游戏执行ping操作,以及每当用户请求刷新时。您可以使用此信息填充主列表。