我有几个客户端都通过 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/