多进程中的RPC

  • A+
所属分类:IT技术

参与多进程项目后,经常听说RPC,觉得很高大上,好像很难的样子。经过一番学习后,发现,其实在开发移动app项目的时候经常使用这个东西,我举个例子大家就明白了。比如移动app中进行登陆验证的时候,移动端会收集用户名和密码,然后打包成一个request,发送给某个网址,后台接到用户名密码后,调用相应函数处理,并返回给客户端结果;客户端接收这个网址的response,解析数据后,就知道了用户权限是否合法。这个过程就是一个RPC过程。是不是恍然大悟,详细内容再看看下面的吧。

RPC

RPC(远程过程调用),广义上讲,只要调用过程不在一个进程中,都称为远程调用;windows将RPC做了细分,发生在一台机器上的跨进程调用称为LPC,意为本地过程调用;发生在网络上的跨进程调用,称为RPC。RPC在分布式中应用比较多

跨进程交互方式

RESTful、Webservice、Http、基于数据库做数据交换、基于消息队列做数据交换、RPC

跨进程交互形式分类

直接交互:比如访问http请求,调用方需要提供方立即提供结果,提供方的运算效率影响着调用方的执行效率,实时性高。

非直接交互:基于数据库的交互方式属于典型的非直接交互,调用方将消息数据存储到数据库中,提供方可以在任意时候取出数据并执行操作,再将结果存储到数据库中,调用方再从数据库中取出结果,这个调用过程实时性差。

RPC架构

服务提供方:定义并提供服务,将服务注册到注册中心中

服务调用方:调用远程服务

服务中心:服务注册与发现

多进程中的RPC

调用流程

多进程中的RPC

  1. 客户端(服务调用方)调用存根里的方法
  2. 待传输的对象数据序列化成二进制数据
  3. 网络传输到服务端(服务提供端)
  4. 二进制数据反序列化出对象
  5. 利用反射调用服务的方法
  6. 返回方法的返回值
  7. 将返回值序列化成二进制数据
  8. 网络传输给客户端(服务调用方)
  9. 反序列化二进制数据
  10. 返回结果给调用方的调用函数

重点实现

调用方传入:接口类名称、方法名及参数类型、实参数据

注册中心传入:接口类名称、接口类实现的对象(默认将接口类中所有的公开方法一次性注册到注册中心中去,每个方法都会被封装成一个注册项)

服务查找:根据接口类名称、方法名及参数类型去注册中心寻找实现对象(由于接口可能存在多个实现类,因此查找结果可能存在多个符合项),进而反射调用对象的相应方法。

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!