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