我正在开发一个多客户端应用程序,它将与 LAN 中的服务器连接。
每个客户端都可以发送更改服务器状态的命令。 我将称之为“ServerStatus”,它是一个具有一些值的对象。
现在,如果 ServerStatus 发生变化,所有客户端都应该立即知道。 我的想法是这样工作:
服务器每秒向所有监听客户端发送一个多播,其中包含 ServerStatus 的 versionNumber。因此,如果新客户端加入多播组,他将查看他的 versionNumber 是否相同。 如果没有,客户端将通过UDP询问当前的ServerStatus版本。
当客户端发送更改 ServerStatus 的命令时, 服务器将其当前(和新的)ServerStatus 发送到同一个多播组, 而在另一个线程中,ServerStatus的版本号仍然每秒共享。
你们认为这是处理这个问题的好方法吗? 或者这会导致太多问题,...等等
最佳答案
如果新的 ServerStatus 无法到达客户端,会发生什么情况?在我看来,在向客户端发送新状态时不应该使用 UDP,而应该使用可靠的协议(protocol)。因此,如果您打算对此使用多播,您将必须获得 reliable multicast protocol .
<小时/>另一方面,您可能更喜欢客户端与服务器同步:
每次客户端进入网络时,它都会询问服务器其statusid(如果不相同,服务器会向他发送 ServerStatus),并且客户端还会注册新的状态更改事件。 (TCP)
离开时,客户端可以发送 UNREGISTER 消息 (UDP)。
每次 ServerStatus 更改时,服务器都会将新的 ServerStatus 发送到每个注册的客户端。收到新的 Serverstatus 后,客户端将向服务器发送类似 ack 的消息。(TCP)
如果服务器未收到确认,则相关客户端将被取消注册(因为这意味着客户端已在未取消注册的情况下离开网络 - 由于错误)。
希望这有帮助..
关于java - 在 LAN 中保持客户端更新的最佳方式 - Java 网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013709/