手撕RPC

2019-03-27  本文已影响0人  起个名忒难

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信息数据。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能。在OSI网络通信模型中,RPC跨域了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

大白话一点,rpc对程序员朋友是透明的。你可以像调用本地方法一样调用远端方法,是两个JVM程序之间的信息交互。无论是本地方法还是远端方法,你直接用就可以了, 如果是远端方法剩下的交给RPC。

尽管cglib代理的实现更为强大和高效,cglib可以不需要接口类,jdk动态代理必须要有接口类,但是在使用时还是首选jdk动态代理,因为接口类肯定会提供的。cglib的代码不易维护。

下面手撕代码

server端暴露服务.png image.png
public interface HelloRpc {
    public String helloRpc(String args);
    String hellRpc(String arg1, String arg2);
}
public class HelloRpcImpl implements HelloRpc {
    @Override
    public String helloRpc(String args) {
        return "HelloRPC : ---- " + args;
    }
    @Override
    public String hellRpc(String arg1, String arg2) {
        return "arg1 : " + arg1 + "args2:" + arg2;
    }
}
public static void main(String[] args) throws IOException {
    HelloRpcImpl helloRpc = new HelloRpcImpl();
        RpcFrame.server(helloRpc , 80);
}
public static void main(String[] args) {
    HelloRpc o = (HelloRpc) RpcFrame.helloRpc(HelloRpc.class, "127.0.0.1", 80);
    String hello = o.hellRpc("client !" , "verygood!");
    System.out.println(hello);
}

上面只是模拟rpc的实现方式,写的一段代码,市面上的rpc也不是这样搭建的。不过核心思想还是相同的。 但就dubbo而言,暴露的服务是要注册到zk上的,消费方如果需要某个服务,回去zk上查找,并在本地缓存。

上一篇下一篇

猜你喜欢

热点阅读