在LAN中保持客户端更新的最佳方法 - Java网络

时间:2012-10-22 14:35:33

标签: java networking udp multicast lan

我正在开发一个多客户端应用程序,它将与局域网中的服务器连接。

每个客户端都可以发送更改服务器状态的命令。 正如我所说,这个'ServerStatus'是一个带有一些值的对象。

现在,如果ServerStatus发生变化,所有客户端都应立即了解它。 我的想法是这样工作:

服务器每秒向所有具有ServerStatus版本号的侦听客户端发送多播。因此,如果新客户端加入多播组,他将查看他的versionNumber是否相同。 如果没有,客户端将通过UDP询问当前版本的ServerStatus。

当客户端发送更改ServerStatus的命令时, 服务器将其当前(和新的)ServerStatus发送到同一个组播组, 而在另一个线程中,ServerStatus的版本号仍然每秒共享。

你们认为这是处理这个问题的好方法吗? 或者这会导致太多问题......等等。

2 个答案:

答案 0 :(得分:1)

如果新的ServerStatus无法访问客户端会怎样?在我看来,在向客户端发送新状态时不应使用UDP,而应使用可靠的协议。因此,如果您打算在此使用多播,则必须获得reliable multicast protocol


另一方面,您可能更喜欢与服务器进行客户端同步:

  • 每次客户端进入网络时,它都会向服务器询问其 statusid (如果不相同,服务器会向他发送ServerStatus),客户端也会注册新的状态更改事件。 (TCP)

  • 离开时,客户端可以发送UNREGISTER消息(UDP)。

  • 每次ServerStatus更改时,服务器都会将新的ServerStatus发送到每个注册的客户端。收到新的Serverstatus后,客户端会向服务器发送类似ack的内容。(TCP)

  • 如果服务器未收到确认,则相关客户端将被取消注册(因为这意味着客户端已离开网络而未注销 - 出错)。

希望这会有所帮助..

答案 1 :(得分:1)

基本上,你的想法听起来不错 我建议你更多地了解" group communication"的主体,并查看jGroups等框架,我知道JBoss Cache使用它来在节点之间分配数据。
也许对于可靠性客户端也应该在X秒内查询服务器一次,看他们是否正确版本号,
或至少在它们启动/从崩溃中恢复时执行此操作。