我正在编写一个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方法时,它们会收到相同的消息。有什么想法吗?
答案 0 :(得分:1)
当您忽略调用exportObject()
的异常时,它可能会失败。永远不要那样做。打印例外。