- A+
参与多进程项目后,经常听说RPC,觉得很高大上,好像很难的样子。经过一番学习后,发现,其实在开发移动app项目的时候经常使用这个东西,我举个例子大家就明白了。比如移动app中进行登陆验证的时候,移动端会收集用户名和密码,然后打包成一个request,发送给某个网址,后台接到用户名密码后,调用相应函数处理,并返回给客户端结果;客户端接收这个网址的response,解析数据后,就知道了用户权限是否合法。这个过程就是一个RPC过程。是不是恍然大悟,详细内容再看看下面的吧。
RPC
RPC(远程过程调用),广义上讲,只要调用过程不在一个进程中,都称为远程调用;windows将RPC做了细分,发生在一台机器上的跨进程调用称为LPC,意为本地过程调用;发生在网络上的跨进程调用,称为RPC。RPC在分布式中应用比较多
跨进程交互方式
RESTful、Webservice、Http、基于数据库做数据交换、基于消息队列做数据交换、RPC
跨进程交互形式分类
直接交互:比如访问http请求,调用方需要提供方立即提供结果,提供方的运算效率影响着调用方的执行效率,实时性高。
非直接交互:基于数据库的交互方式属于典型的非直接交互,调用方将消息数据存储到数据库中,提供方可以在任意时候取出数据并执行操作,再将结果存储到数据库中,调用方再从数据库中取出结果,这个调用过程实时性差。
RPC架构
服务提供方:定义并提供服务,将服务注册到注册中心中
服务调用方:调用远程服务
服务中心:服务注册与发现
调用流程
- 客户端(服务调用方)调用存根里的方法
- 待传输的对象数据序列化成二进制数据
- 网络传输到服务端(服务提供端)
- 二进制数据反序列化出对象
- 利用反射调用服务的方法
- 返回方法的返回值
- 将返回值序列化成二进制数据
- 网络传输给客户端(服务调用方)
- 反序列化二进制数据
- 返回结果给调用方的调用函数
重点实现
调用方传入:接口类名称、方法名及参数类型、实参数据
注册中心传入:接口类名称、接口类实现的对象(默认将接口类中所有的公开方法一次性注册到注册中心中去,每个方法都会被封装成一个注册项)
服务查找:根据接口类名称、方法名及参数类型去注册中心寻找实现对象(由于接口可能存在多个实现类,因此查找结果可能存在多个符合项),进而反射调用对象的相应方法。