我正在编写一个 java 程序,我使用 rmi 进行网络通信。我导出一个远程对象,更多客户端可以连接。该对象包含一个返回另一个远程对象的方法,每个客户端都不同。返回的对象包含两个 LinkedBlockingQueue。当连接多个客户端时,它们似乎从同一个队列中获取消息。 这里是第一个界面
public interface RMIInterface extends Remote {
public ConnectionInterface createConnection () throws RemoteException;
}
这是第一个对象
public class RMIImplementation extends UnicastRemoteObject implements RMIInterface {
@Override
public ConnectionInterface createConnection() throws RemoteException {
...
}
}
这是第二个界面
public interface ConnectionInterface extends Remote {
public void sendMessage (Message info) throws RemoteException;
public Message getMessage() throws RemoteException;
}
这是第二个对象
public class RMIConnection implements ConnectionInterface{
private LinkedBlockingQueue<Message> in;
private LinkedBlockingQueue<Message> out;
ServerRMIConnection() {
in = new LinkedBlockingQueue<Message> ();
out = new LinkedBlockingQueue<Message> ();
try {
UnicastRemoteObject.exportObject(this, 0);
} catch (RemoteException e) {
}
}
@Override
public void sendMessage (Message info){
in.offer(info);
}
@Override
public Message getMessage() {
Message message=null;
try {
info = out.poll(120, TimeUnit.SECONDS);
} catch (InterruptedException e) {
}
return message;
}
}
当两个或多个客户端调用getMessage 方法时,它们会收到相同的消息。有什么想法吗?
最佳答案
当您忽略调用 exportObject()
的异常时,它可能会失败。永远不要那样做。打印异常。
关于Java RMI 和队列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30992460/