Java RMI多服务器/单客户端
您好,我是JavaRMI新手,我对JavaRMI服务器有疑问。 现在我有一个工作的RMI程序,有一个服务器和一个客户端。我被告知要创建一个带有一个客户端的多服务器。将有1个主服务器,具有负载平衡和多个子服务器(我不确定这是否是正确的术语),其中主服务器将分配给子服务器的任务。 我不知道这到底是怎么回事。使用JavaRMI可以吗?如果是,是吗Java RMI多服务器/单客户端,java,rmi,Java,Rmi,您好,我是JavaRMI新手,我对JavaRMI服务器有疑问。 现在我有一个工作的RMI程序,有一个服务器和一个客户端。我被告知要创建一个带有一个客户端的多服务器。将有1个主服务器,具有负载平衡和多个子服务器(我不确定这是否是正确的术语),其中主服务器将分配给子服务器的任务。 我不知道这到底是怎么回事。使用JavaRMI可以吗?如果是,是吗 不同的服务器意味着每个服务器需要不同的IP?(不同的机器) 是否可能在一个IP上有多个服务器 如果是后者,它是如何工作的?我只是在一台机器上同时运行所有服务
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);
publicstaticvoidmain(字符串args[])引发RemoteException{
pnServer gui=新的pnServer();
pnp接口存根;
注册处注册;
国际港口=2001年;
字符串serverName=“”;
p obj=新的p();
/*启动主服务器*/
UnicastRemoteObject.unexportObject(obj,true);
存根=(pnInterface)UnicastRemoteObject.exportObject(obj,2000);
reg=LocaterRegistry.createRegistry(2000年);
试一试{
注册绑定(“服务器2000”,存根);
}捕获(AlreadyBoundException ae){
注册重新绑定(“服务器2000”,存根);
}
System.out.println(“主服务器启动!\n”);
/*使用端口2001、2002、2003与子服务器建立连接*/
serverConnection=“正在连接到子服务器。请稍候…”;
对于(int i=0;i
不同的服务器意味着每个服务器需要不同的IP?(不同的机器)
没有
是否可能在一个IP上有多个服务器
当然可以。即使在同一个JVM中。只需导出更多的远程对象
但是我看不到实际的点。如果只有一个服务器主机,就没有负载平衡了。负载在同一个主机上。< /P>我知道。不同的服务器有不同的端口。有3个不同的端口被认为是3个不同的服务器。至于负载平衡,我也不确定,但是我的讲师说,负载。平衡是为了确保在子服务器上运行任务时不会将任何任务分配给该子服务器。这就是负载平衡的目的吗?负载平衡需要多个物理硬件。否则就没有什么意义了。同一JVM中的远程对象可以共享端口,而且默认情况下,它们会添加端口我的更新代码。这是解决我的问题的正确方法吗?不,不是。为什么在导出远程对象之前要取消它的移植?而且没有理由使用不同的端口号。不要浪费有限的资源。如果你想要三台服务器,你需要创建三个实例。你不能只导出和取消导出相同的端口号对象,并期望最终得到三台导出的服务器。这一点没有意义。但这段代码甚至没有运行,因此不值得进一步评论。
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);