我正在写一个假的运送应用程序。客户端发送产品,服务器保留所有发送的产品。
现在服务器 - 因为它只是虚拟的 - 每分钟更新产品的状态(SEND - > ACCEPTED - > SHIPPED - > RECEIVED),现在我希望服务器更新相应的客户端更新了州。
我提到的大多数RMI信息只涉及客户端 - >服务器..但我需要我的服务器给我的客户端打电话给这个..
希望你们能帮忙!
答案 0 :(得分:6)
服务器到客户端的通信在所有远程技术(包括RMI)中都是一个雷区。这可能是您在努力寻找有关该主题的大量文档的原因。对于受控环境中的虚拟程序,以下方法将起作用并且是最简单的方法。请注意,已省略所有错误处理。
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
interface ClientRemote extends Remote {
public void doSomething() throws RemoteException;
}
interface ServerRemote extends Remote {
public void registerClient(ClientRemote client) throws RemoteException;
}
class Client implements ClientRemote {
public Client() throws RemoteException {
UnicastRemoteObject.exportObject(this, 0);
}
@Override
public void doSomething() throws RemoteException {
System.out.println("Server invoked doSomething()");
}
}
class Server implements ServerRemote {
private volatile ClientRemote client;
public Server() throws RemoteException {
UnicastRemoteObject.exportObject(this, 0);
}
@Override
public void registerClient(ClientRemote client) throws RemoteException {
this.client = client;
}
public void doSomethingOnClient() throws RemoteException {
client.doSomething();
}
}
用法:在服务器上创建一个Server对象,将其添加到RMI注册表并在客户端上查找。
还有其他技术可以使客户端通知更容易,Java消息服务(JMS)通常用于此。
答案 1 :(得分:0)
您的客户端可以经常询问服务器并自行更新,或者您可以对客户端进行编程,因为它们是RMI服务器和服务器跟踪连接到它的客户端,并在服务器值更改时使用rmi回调客户端。您可以看起来 SNMP协议它支持回调( snmp陷阱)
答案 2 :(得分:0)