运维开发网

跨网络在java实例之间同步变量

运维开发网 https://www.qedev.com 2020-06-13 10:45 出处:网络 作者:运维开发网整理
我在大学里有这个任务,他们要求我们将 Java应用程序作为具有多个客户端的套接字服务器运行.客户端发送一个字符串,服务器以大写形式返回带有请求计数器的字符串.非常简单. 任何给定客户端发出的每个请求都在服务器端计算,并存储在每个客户端连接线程的静态变量中.这样每个客户端请求都会在服务器上全局递增计数器.这很好用. 现在,他们要求我们在网络上的不同计算机上运行该服务器的“备份”实例,以便在主服务器停
我在大学里有这个任务,他们要求我们将 Java应用程序作为具有多个客户端的套接字服务器运行.客户端发送一个字符串,服务器以大写形式返回带有请求计数器的字符串.非常简单.

任何给定客户端发出的每个请求都在服务器端计算,并存储在每个客户端连接线程的静态变量中.这样每个客户端请求都会在服务器上全局递增计数器.这很好用.

现在,他们要求我们在网络上的不同计算机上运行该服务器的“备份”实例,以便在主服务器停止响应时,客户端连接到其中一个备份.那,我开始工作了.但计数器显然已重置,因为它是一个不同的服务器.

挑战在于主要和次要的请求计数器是相同的,因此如果主要响应10个请求,然后关闭,客户端切换到备份并发出请求,则备份服务器响应11.

这是我考虑的:

>如果在同一台PC上,我会使用线程,但我们在网络上,所以我

相信这不会奏效.

>服务器将该计数器发送给客户端

响应,然后将其返回到服务器

下一个请求等等.不是非常“干净”的imo但可以工作.

>每个服务器相互通信以同步此计数器.但是,套接字

如果可能的话,这样做似乎没有效率. RMI

似乎是一个替代方案,但我想在我之前确认

开始学习它.

这里有任何线索或建议吗?我没有发布代码,因为我不需要这里的解决方案,但如果有必要,我可以邀请到gihub回购.

编辑:此项目没有延迟,可靠性或类似约束.有X个客户端和Y个服务器(单个主服务器,多个故障转移).像DB这样的其他第三方基础设施实际上不是一种选择,但欢迎使用第三方Java库.基本上我只是在多台PC上运行Eclipse.这是对分布式系统的介绍,预计在2周内完成,因此我认为“保持简单”是关键!

编辑2:备份服务器的数量和地址将作为参数传递给应用程序,因此不需要广播/发现.我们可能会在学期后期的实验作业中涵盖所有这些要点:)

编辑3:从你所有的好建议,我将尝试实现#3的一些变体,让你知道它是如何工作的.我认为我在这里遇到的问题是确保所有服务器都知道其他服务器.但就像我提到的那样,他们不需要发现彼此,所以我现在将硬编码,并在下一个任务中重新访问!可能选择一些当选的主人……

0

精彩评论

暂无评论...
验证码 换一张
取 消