我有一个关于Java RMI的基本问题,我主要是一个C ++背景,而且RMI还有一些我无法获得的东西。
要明确的是,我能够使它工作正常,但它与程序的生命周期有关。
如果我有玩具Java程序,例如:
public class Test1 {
public static void main(String args[]) {
System.out.println( "start !" );
}
}
当我从shell运行它时,它打印消息并退出。
如果我想使用套接字,那么我需要在我的服务器中有一些无限循环,它将等待传入连接,处理它们,然后重新开始。
ServerSocket socketserver = new ServerSocket( port_id );
System.out.println( "server: waiting" );
while(true) {
Socket socket = socketserver.accept();
System.out.println( "server: incoming connection" );
... do stuff...
socket.close();
}
现在,假设我有一个带有以下main()
方法的RMI服务器:
public static void main(String args[]) throws Exception {
System.out.println( "RMI server started !" );
MyObject obj = new MyObject();
Naming.bind( "//localhost/myObject", obj );
System.out.println( "Done!" );
}
假设可以找到类MyObject
,并且所有内容都可以正常编译。
如果我从shell运行它,那么虽然确实打印最后一条消息,并且在该行之后没有无限循环,但程序不会退出。
问题:
linked question回答第一个问题,但不回答第二个问题。 Oracle tutorial也没有(除非我错过了?)
答案 0 :(得分:1)
答案 1 :(得分:0)
您应该实现一个侦听客户端连接的线程,并创建工作线程来响应客户端。当主线程终止时,连接的线程也将终止。