Java RMI多服务器/单客户端

Java RMI多服务器/单客户端,java,rmi,Java,Rmi,您好,我是JavaRMI新手,我对JavaRMI服务器有疑问。 现在我有一个工作的RMI程序,有一个服务器和一个客户端。我被告知要创建一个带有一个客户端的多服务器。将有1个主服务器,具有负载平衡和多个子服务器(我不确定这是否是正确的术语),其中主服务器将分配给子服务器的任务。 我不知道这到底是怎么回事。使用JavaRMI可以吗?如果是,是吗 不同的服务器意味着每个服务器需要不同的IP?(不同的机器) 是否可能在一个IP上有多个服务器 如果是后者,它是如何工作的?我只是在一台机器上同时运行所有服务

您好,我是JavaRMI新手,我对JavaRMI服务器有疑问。 现在我有一个工作的RMI程序,有一个服务器和一个客户端。我被告知要创建一个带有一个客户端的多服务器。将有1个主服务器,具有负载平衡和多个子服务器(我不确定这是否是正确的术语),其中主服务器将分配给子服务器的任务。 我不知道这到底是怎么回事。使用JavaRMI可以吗?如果是,是吗

  • 不同的服务器意味着每个服务器需要不同的IP?(不同的机器)
  • 是否可能在一个IP上有多个服务器
  • 如果是后者,它是如何工作的?我只是在一台机器上同时运行所有服务器吗? 至于第一个,我想我在做测试时需要很多笔记本电脑,因为现在在我的客户机程序中,客户机需要放置服务器IP,因此,客户机需要放置3个服务器IP(假设我有1个主服务器和2个子服务器)? 下面是我启动服务器的代码(适用于1台服务器1台客户端)

    我不希望你们有任何代码,但我需要对如何解决这个问题有明确的看法。 如果我上面的代码有任何错误,我很抱歉,因为我对JavaRMI还是相当陌生的,确切地说是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);
    
    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);