小编Jul*_*oQc的帖子

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

我在大学里有这个任务,他们要求我们将Java应用程序作为具有多个客户端的套接字服务器运行.客户端发送一个字符串,服务器以大写形式返回带有请求计数器的字符串.非常简单.

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

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

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

这是我考虑的:

  1. 如果在同一台PC上,我会使用线程,但我们在网络上,所以我相信这不会起作用.
  2. 服务器使用响应将该计数器发送到客户端,然后响应在下一次请求时将其返回给服务器,依此类推.不是非常"干净"的imo但可以工作.
  3. 每个服务器相互通信以同步此计数器.但是,即使可能,套接字似乎也不是非常有效.RMI似乎是替代方案,但在开始学习之前我想要确认.

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

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

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

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

java sockets

5
推荐指数
1
解决办法
249
查看次数

从 JMenuBar 获取 JMenuItems

我试图从接收 JFrame 作为参数的类中检索 JMenuBar 中的 JMenuItems。我已经阅读了一些内容,我想我明白 JMenuBar 包含 JMenu 但那些不直接包含 JMenuItems,对吗?

这是我到目前为止所拥有的(显然,它不起作用!):

JFrame主窗口;

[...]

Component[] 菜单 = mainWindow.getJMenuBar().getComponents();

那么我怎样才能获得(最多可以说)我的 JFrame 的所有 JMenuItem 的数组呢?然后我将简单地一一启用它们。

谢谢!

java arrays swing

1
推荐指数
1
解决办法
1784
查看次数

标签 统计

java ×2

arrays ×1

sockets ×1

swing ×1