2
我正在写一个java程序,我使用rmi进行网络通信。我导出一个远程对象,更多的客户端可以连接。该对象包含一个返回另一个远程对象的方法,对于每个客户端都不相同。返回的对象包含两个LinkedBlockingQueue。当连接多个客户端时,似乎他们从同一队列中获取消息。 这里,第一接口Java RMI和队列问题
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;
}
}
W¯¯当两个或更多客户端调用getMessage方法时,它们会收到相同的消息。有任何想法吗?
你确定你正在为每个客户端创建一个新的'RMIConnection'对象吗? – EJP
当然,我用这个语句:return new RMIConnection(); – Davide