天天看点

分布式专题学习笔记——分布式通信框架RMI

分布式通信框架RMI

1.什么是rpc?

Remote Procedure call protocal

prc协议其实是一个规范,Dubbo,Thrif,RMI,WebService,Hessain

网络协议和网络io对于调用者和服务来说是透明的

一个rpc应该包含的要素

RMI的概述:

RMI(remote method invocation)可以认为是java的rpc版本

RMI使用的是JRMP(Java Remote Method Protocal),JRMP是专门为java定制的通信协议,所以是纯java的分布式解决方案。

如何实现一个RMI程序

1 创建远程接口,并且继承 java.rmi.Remote 接口

public interface IsSayHello extends Remote{
    public String sayHllo(String name) throws RemoteException;
}
           

2 实现远程接口,并且继承 UnicastRemoteObject 接口

public class SayHelloImpl extends UnicastRemoteObject implements IsSayHello{

    public SayHelloImpl() throws RemoteException {
    }

    @Override
    public String sayHllo(String name) throws RemoteException {
        return "小明———》"+name;
    }
}
           

3 创建服务器程序:createRegistry方法注册远程对象

public class HelloServer {
    public static void main(String[] args){
        try {
            try {
                IsSayHello sayHello = new SayHelloImpl();
                LocateRegistry.createRegistry(8888);
                Naming.bind("rmi://localhost:8888/sayhello",sayHello);
                System.out.println("server start success");
            } catch (AlreadyBoundException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}
           

4 创建客户端程序

public class HelloClient {
    public static void main(String[] args){
        try {
            IsSayHello hello = (IsSayHello)Naming.lookup("rmi://localhost:8888/sayhello");
            System.out.println(hello.sayHllo("hello 菲菲"));
        } catch (NotBoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}
           

如果自已要实现一个RMI

1 编写服务器程序,暴露一个监听,可以用socket

2 编写客户端程序,通过ip和端口连接指定的服务器,并且将数据做封装(序列化)

3  服务端收到请求,先反序列化,在进行业务逻辑处理,把处理结果序列化返回。

继续阅读