クライアントとサーバー間のすべての接続をRMIプロトコルで終了します。rmi clientを安全に閉じるには?
Remote r= Naming.lookup("rmi://192.168.105.38:9121/AccountRMIService");
if(r instanceof RmiInvocationWrapper_Stub) {
RmiInvocationWrapper_Stub stub = (RmiInvocationWrapper_Stub)r;
System.out.println("hashCode="+stub.getRef().hashCode());
}
System.out.println(r);
//How to close the connection with 'Remote' ?
サーバーのRMIの状態を確認するためにいくつかのコードは:
final ThreadLocal<List<Socket>> currentSocket = new ThreadLocal<List<Socket>>() {
protected List<Socket> initialValue() {
return new ArrayList<Socket>();
}
};
RMISocketFactory.setSocketFactory(new RMISocketFactory() {
public Socket createSocket(String host, int port) throws IOException {
Socket socket = new Socket(host, port);
socket.setKeepAlive(true);
socket.setSoTimeout(300);
currentSocket.get().add(socket);
return socket;
}
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port);
}
});
Remote r = Naming.lookup("rmi://192.168.105.38:9121/AccountRMIService");
if (r instanceof RmiInvocationWrapper_Stub) {
RmiInvocationWrapper_Stub stub = (RmiInvocationWrapper_Stub) r;
System.out.println("hashCode=" + stub.getRef().hashCode());
}
Iterator<Socket> s = currentSocket.get().iterator();
while(s.hasNext()) {
s.next().close();
s.remove();
}
これは、RMIのコミュのクライアントではありません。単純なソケットではなく、RMIプロトコルを使ってサーバーの状態を確認したいだけです。 場合によっては、サーバーはまだ実行されていますが、すべての要求がブロックされています。
クライアントからのすべての接続を終了するにはどうすればよいですか?サーバーはまだ実行中です。 – imxylz
これはサーバー側のリスニングソケットを除いては何も閉じませんが、将来のすべてのクライアントがリモートメソッド呼び出しを実行できなくなります。頼まれたものではありません。 – EJP