如何使用Java RMI创建多个服务器?

时间:2018-03-05 20:31:25

标签: java client-server rmi distributed-computing distributed-system

我需要:

与前端通信的客户端,与3个文件服务器通信。

我应该怎么做呢?它需要使用RMI作为分布式系统。

我还需要监控所有三个文件服务器。

根据我的理解,我需要建立一个RMI注册表,但如何在一个注册表中建立三个并发服务器?

1 个答案:

答案 0 :(得分:1)

  

好的,我正确地认为我有以下内容:服务器接口,服务器实现和主服务器,它创建三个服务器(具有唯一名称),最后是客户端?

  1. 主服务器'需要在自己的localhost上创建一个Registry,将自己绑定到Registry,以便从服务器可以找到它,并导出一个远程接口,让服务器自己注册它。
  2. 主服务器必须代表从属服务器对此注册表进行绑定,因为您无法绑定到远程注册表。但事实上,奴隶根本不需要与登记处绑定,只能向登记处登记。
  3. 主服务器需要导出第二个为客户端提供API的远程接口,该客户端提供上传API,其实现执行平衡操作。为了安全起见和简单起见,我会将此接口与从属接口使用的接口分开:您不需要尝试成为从属服务器的客户端,或者担心远程接口中与从属相关的方法是什么。
  4. 所有这些服务器和注册表都可以在端口1099上运行。
  5. 奴隶可能是同一服务的多个实例,因此它们都使用通用的远程接口。此接口提供上传到从属API,并且还需要允许每个从属设备提供有关每个从属设备的填充程度的知识,可能作为上载方法的返回值,或者作为查询方法。
  6. 快速草图:

    public interface UploadMaster extends Remote
    {
        void upload(String name, byte[] contents) throws IOException, RemoteException;
    }
    
    public interface LoadBalancingMaster extends Remote
    {
        void register(Slave slave) throws RemoteException;
        void unregister(Slave slave) throws RemoteException;
    }
    
    public interface Slave extends Remote
    {
        /** @return the number of files now uploaded to this slave. */
        int upload(String name, byte[] contents) throws IOException, RemoteException;
        int getFileCount() throws RemoteException;
    }
    

    我希望这是作业。 RMI是文件传输的不良选择,因为它将整个参数列表捆绑到两端的内存中,而不是提供流式接口。