Java 有没有办法通过RMI对象发送事件?

Java 有没有办法通过RMI对象发送事件?,java,rmi,Java,Rmi,我有几个客户端都通过RMI引用同一个远程对象,我想知道当其中一个客户端运行远程方法时,是否可以向所有客户端中的存根对象发送事件 例如,如果远程对象“obj”有一个“updateValue()”方法,而客户端A正在通过存根对象运行它,那么具有真实“obj”的服务器是否可以发送一个事件,告诉客户端A、B、C等。。。对象是否已更新?您描述的是一种“”机制,它不是RMI的一部分。您可以轻松地执行某种“”机制,其中对象A、B、C等轮询服务器以获取任何新事件。但这也不是RMI事实上的一部分。您必须实现一个名

我有几个客户端都通过RMI引用同一个远程对象,我想知道当其中一个客户端运行远程方法时,是否可以向所有客户端中的存根对象发送事件


例如,如果远程对象“obj”有一个“updateValue()”方法,而客户端A正在通过存根对象运行它,那么具有真实“obj”的服务器是否可以发送一个事件,告诉客户端A、B、C等。。。对象是否已更新?

您描述的是一种“”机制,它不是RMI的一部分。您可以轻松地执行某种“”机制,其中对象A、B、C等轮询服务器以获取任何新事件。但这也不是RMI事实上的一部分。您必须实现一个名为getNewEvent()的附加方法,该方法每X秒调用一次服务器,以了解是否发生了新事件。

您描述的是一种“”机制,它不是RMI的一部分。您可以轻松地执行某种“”机制,其中对象A、B、C等轮询服务器以获取任何新事件。但这也不是RMI事实上的一部分。您必须实现一个名为getNewEvent()的附加方法,该方法每X秒调用一次服务器,以了解是否发生了新事件。

您可能需要查看事件通道/java消息传递服务(JMS)——我想这正是您所说的。它是J2EE的一个核心功能,但是JMS解决方案可以在您的系统中使用,而不需要J2EE的其他部分。

您可能需要研究事件通道/java消息服务(JMS)——我认为这正是您所说的。它是J2EE的一个核心功能,但是JMS解决方案可以在您的系统中使用,而不需要J2EE的其他部分。

JMX有一个远程工作的事件API——还没有直接使用它

如果您想变得非常花哨,可以在所有客户机上启动RMI服务器,并让它们将存根传递给保存有问题对象的“主”服务器。主服务器可以使用标准侦听器/模型模式调用存根


如果是我,我会用一个动态的主题来描述JMS。

JMX有一个远程工作的事件API——没有直接使用它

如果您想变得非常花哨,可以在所有客户机上启动RMI服务器,并让它们将存根传递给保存有问题对象的“主”服务器。主服务器可以使用标准侦听器/模型模式调用存根


如果是我,我会用一个动态主题来描述JMS。

RMI是一种客户机-服务器技术,可以使用RMI通道与服务器上的远程对象通信,但服务器无法回拨客户机

不过,若你们明白我的意思的话,并没有什么能阻止你们拥有两个RMI通道,这样双方都可以充当客户机和服务器

我们这样做是为了向连接到中央服务器的桌面应用程序发送通知,它工作得很好。桌面应用程序导出(用RMI的说法)回调存根,连接到中央服务器,并在服务器上注册回调存根。然后,服务器可以向所有连接的桌面应用程序发送通知。当然,您需要设置网络基础设施(防火墙等),以便实现双向连接。所以,是的,我想说这是可能的,但需要比单个单向通道更大的努力

我只是很快地看了一下,但它似乎说明了这个想法(如果不是这样,请告诉我,我确信我可以找到这个用例的代码片段)


其他备选方案包括轮询或JMS,如另一个答案中所述

RMI是一种客户机-服务器技术,可以使用RMI通道与服务器上的远程对象通信,但服务器无法回拨客户机

不过,若你们明白我的意思的话,并没有什么能阻止你们拥有两个RMI通道,这样双方都可以充当客户机和服务器

我们这样做是为了向连接到中央服务器的桌面应用程序发送通知,它工作得很好。桌面应用程序导出(用RMI的说法)回调存根,连接到中央服务器,并在服务器上注册回调存根。然后,服务器可以向所有连接的桌面应用程序发送通知。当然,您需要设置网络基础设施(防火墙等),以便实现双向连接。所以,是的,我想说这是可能的,但需要比单个单向通道更大的努力

我只是很快地看了一下,但它似乎说明了这个想法(如果不是这样,请告诉我,我确信我可以找到这个用例的代码片段)

其他备选方案包括轮询或JMS,如另一个答案中所述