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

标签 java rmi

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

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

最佳答案

RMI是一种客户端-服务器技术,RMI channel 可用于与服务器上的远程对象进行通信,但服务器无法回调客户端。

没有什么可以阻止你拥有两个 RMI channel ,以便双方都充当客户端服务器,如果你明白我的意思的话。

我们这样做是为了向连接到中央服务器的桌面应用程序发送通知,并且效果很好。桌面应用程序导出(用 RMI 术语)回调 stub ,连接到中央服务器,并在服务器上注册回调 stub 。然后,服务器可以向所有连接的桌面应用程序发送通知。当然,您需要设置网络基础设施(防火墙等)以便可以进行双向连接。所以是的,我想说这是可能的,但比单个单向 channel 需要更多的努力。

我只快速浏览了 this article ,但它似乎说明了这个想法(如果不是这样,请告诉我,我确信我可以找到此用例的代码片段)。

其他替代方案包括轮询或 JMS,如其他答案中所述。

关于java - 有没有办法通过 RMI 对象发送事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390454/

相关文章:

java - JDBC 4.0 - MS SQL 2005 - 如何从 Java 应用程序插入图像?

java - 将 Realm 与 try-with-resources 一起使用是一种好习惯吗?

Java RMI - 何时创建 stub 、启动注册表并指定代码库?

java - 有没有办法列出当前导出的远程对象?

java/spring-在 org.springframework.context.support.AbstractApplicationContext 处获取 NoClassDefFoundError

java - GWTTestCase - 未找到测试

javascript - Vaadin 14 中的 Google map

Java:不兼容的类型

java - 找不到 RMI 注册表

openshift中的Java RMI端口绑定(bind)错误