您好我是Java RMI的新手,我对Java RMI Server有疑问。 现在我有一个有1个服务器和1个客户端的RMI程序。我被告知用一个客户端创建一个多服务器。将有1个主服务器具有负载平衡和多个子服务器(我不确定这是否是正确的术语),其中主服务器将任务分配给子服务器。 我不知道这实际上是如何工作的。是否可以使用Java RMI?如果是的话,
如果是后者,它是如何工作的?我是否只在一台机器上同时运行所有服务器? 至于第一个,我想我在测试时需要很多笔记本电脑,因为现在在我的客户端程序中,客户端需要放置服务器IP,因此,客户端需要放置3个服务器IP(假设我有1个主服务器)服务器和2个子服务器)? 下面是我启动服务器的代码(适用于1台服务器1客户端)
public class pnServer {
JFrame f = new JFrame("Server UI");
JPanel p = new JPanel();
JTextField tf;
static java.rmi.registry.Registry reg;
GridLayout layout = new GridLayout(0,1);
public pnServer() {
p.setLayout(layout);
f.getContentPane().add(p);
f.setSize(200, 200);
tf = new JTextField("Server is now ready");
p.add(tf);
f.pack();
f.setDefaultCloseOperation(3);
f.setVisible(true);
}
public static void main (String args[]) {
pnServer gui = new pnServer();
try {
//System.setSecurityManager(new RMISecurityManager());
p obj = new p();
reg = java.rmi.registry.LocateRegistry.createRegistry(1099);
/*pnInterface stub = (pnInterface) UnicastRemoteObject.exportObject(obj, 0);
Registry reg = LocateRegistry.getRegistry();
reg.bind("PrimeNum", stub);*/
Naming.rebind("rmi://localhost/ROG", obj);
System.out.println("Server is up!");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
我不期待你们的任何代码,但我需要清楚地了解如何解决这个问题。 如果我的代码在任何方面都是错误的,我很抱歉,因为我还是Java RMI的新手,确切地说是1个月。
提前谢谢
编辑: 所以我尝试创建1个主服务器(端口2000)和3个子服务器(端口2001,2002,2003)这就是我想出来的
public static void main (String args[]) throws RemoteException {
pnServer gui = new pnServer();
pnInterface stub;
Registry reg;
int port = 2001;
String serverName = "";
p obj = new p();
/* Starting master server */
UnicastRemoteObject.unexportObject(obj, true);
stub = (pnInterface) UnicastRemoteObject.exportObject(obj, 2000);
reg = LocateRegistry.createRegistry(2000);
try {
reg.bind("Server2000", stub);
}catch (AlreadyBoundException ae) {
reg.rebind("Server2000", stub);
}
System.out.println("Master server is up!\n");
/* Establish connection to sub server with port 2001, 2002, 2003 */
serverConnection = "Connecting to sub server. Please wait...";
for (int i = 0; i<3 ; i++) {
try {
serverName = "Server" + port;
UnicastRemoteObject.unexportObject(obj, true);
stub = (pnInterface) UnicastRemoteObject.exportObject(obj, port);
reg = LocateRegistry.createRegistry(port);
try {
reg.bind(serverName, stub);
}catch (AlreadyBoundException ae) {
reg.rebind(serverName, stub);
}
serverConnection = serverConnection + "\nSuccessfully listening to port: " + port;
}catch (RemoteException ex) {
ex.printStackTrace();
serverConnection = serverConnection + "\nFail to listen to port: " + port;
}
port += 1;
}
System.out.println(serverConnection);
}
在windows命令中使用netstat命令,我可以看到正在侦听端口2000 - 2003并且所有端口都具有相同的PID。我是否实现了我想要做的事情(创建多个服务器)?这是使用Java RMI执行此操作的正确方法吗?
答案 0 :(得分:0)
不同的服务器意味着每台服务器需要具有不同的IP? (不同的机器)
没有
1 IP上可能有多个服务器吗?
当然可以。即使在同一个JVM中。只需导出更多远程对象。
然而,我没有看到实际的观点。如果只有一个服务器主机,则根本没有负载平衡。负载保持在同一主机中。