Java 在第一次RMI呼叫服务器的固定时间后通知所有客户端

Java 在第一次RMI呼叫服务器的固定时间后通知所有客户端,java,rmi,Java,Rmi,我希望服务器在第一次RMI调用服务器后的固定时间内使用回调通知多个客户端 ie服务器将等待固定时间,以便多个客户端可以加入 //server code void connect (callback) { thread.sleep(time) callback.notify() } 但发生的情况是,并非所有客户端都同时获得回调。变化取决于对服务器进行rmi调用的时间。 如何确保所有客户端同时收到通知 我是RMI新手,正在尝试实现客户机-服务器机制。你不能。要么你将一个接一个地调用它们,这已经

我希望服务器在第一次RMI调用服务器后的固定时间内使用回调通知多个客户端

ie服务器将等待固定时间,以便多个客户端可以加入

//server code
void connect (callback) {

thread.sleep(time)
callback.notify()

}
但发生的情况是,并非所有客户端都同时获得回调。变化取决于对服务器进行rmi调用的时间。 如何确保所有客户端同时收到通知


我是RMI新手,正在尝试实现客户机-服务器机制。

你不能。要么你将一个接一个地调用它们,这已经破坏了同步性,要么你并行调用它们,在这种情况下,你仍然无法控制线程的执行,在这两种情况下,你也无法控制数据包如何发送到网络

这里的问题是需求本身,而不是如何实现它。为什么在第一次通话后要有一个固定的时间?您如何知道所有可能的客户端都在该固定时间内连接?为什么客户都需要同时收到通知?你为什么要回电话?RMI中的回调通常是设计不佳的标志,出于安全原因,网络管理员对任何类型的回调都非常怀疑


一般的客户机-服务器机制不需要回调。RMI已经是一种客户机-服务器机制。

请记住,我使用RMI已经有一段时间了,
我同意另一个答案,即这是一个有问题的要求
然而,如果这个要求是必须的,
我会尝试实现我将要建议的东西,
希望我正确地理解问题是,每个服务于RMI调用的服务器线程都会调用connect
我建议如下-
在RMI服务器线程(即运行“连接”方法调用的线程)之间实现共享数据结构
。 共享数据结构可以是java.util.Date(或表示毫秒的Long)到回调列表的并发映射
connect的代码将执行以下伪代码:

a。检查是否有要通知回调的日期对象的条目
如果没有这样的条目,则创建它并放入映射,并将“true”设置为newEntry标志
B将回调添加到列表中
C如果设置了“newEntryFlag”,则使用以计划在到达日期对象的时间时将调用的任务
D当任务的时间到达时,任务的run方法将从共享映射中获取回调列表,并为每个回调调用notify方法


当然,您需要在这里正确处理同步,我相信您可以做到。

您需要解释如何实现同步。这不可能。