手写RPC序列之一------------------------(一)理解RPC实现原理

作为软件架构风格之一,RPC框架在企业应用中具有不可替代的作用,RMI、DUBBO、HESSIAN、THIFT等都是RPC框架的具体应用,那么什么是RPC框架呢,下图是一个典型RPC实现的框架图

   

概括起来,包括如下几个组件(或角色)

   A.客户端部分:

      1.接口服务引用:

           体现在上图中就是接口服务1、接口服务2、接口服务3等,这些都是以接口方式提供的一些服务,典型的面向接口编程的思想;

      2.动态代理层

          这一层的主要目的是拦截来自高端(一般是客户端调用接口)的服务方法调用,提取高端执行的服务名、方法名、参数值等,为什么要这样处理?(大家先思考一下,后面会解释)。

     3.序列化与反序列化

      这里其实是指采用的字节流协议,JAVA\DUBBO\HESSIAN等开发方实现的字节流协议是不一样的,读过DUBBO源码的读者应该知道,其专门有一个协议层protocal,用以适配不同的协议,比如RMI\DUBBO\HESSIAN等,其他如MICROSOFT 有CORBAL,BORLAND有BROKER等实现方式,都是为了转化对应的字节流或字符流进行序列化或反序列化处理,

Java里面提供了ObjectInputStream\ObjectOutputStream 将IO流进行了封装(这里应用了装饰器模式)。

    4.客户端存根stub

   这里一般是作为客户端的代理层,用过WEB SERVICE 的WSDL 实现相关的endPoint,这里基本上由SOCKET+ Stream 来封装了。

B.服务端部分:

   1.接口服务:

     同客户端接口服务列表一样。

   2.接口服务实现

      针对接口的具体实现部分;

  3.反射

   这里才是通过接口服务名、方法名、参数值还原成对应的服务实现,通过反射来调用实际的方法,处理相关的业务,这里也就是客户端发送过来的相关的参数(客户端动态代理中提取的),如果说客户端发送的是相关的命令(不去具体执行),那么这里就是命令的真正执行的地方。

 4.序列化与反序列化

   这里同客户端的一样,如果同客户端使用的协议不同,需要进行相关的解析(本文由于均采用JAVA实现,故不做特殊处理);

5.服务端存根(skeleton)

也称为骨架,封装服务端高层的数据流,作为代理,屏蔽高层的不同。

 

下一节,通过代码讲解具体的实现,尽请关注!

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值