一、背景描述
什么是远程调用,网上一搜,有很多文章在讲解,但是感觉都讲的很深奥,对于初学者并不友好,下面是一种让我看到后,有一种豁然开朗的感觉的介绍方式。
二、概念介绍
函数接口调用方式分为:
- 本地调用(Local Procedure Call,简称LPC)。
- 远程调用(Remote Procedure Call,简称RPC)。
下面是用C语言写的一个示例程序:
- 本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!
- 远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。
三、远程调用原理
比如 A (client) 调用 B (server) 提供的remoteAdd()方法,以下是步骤:
- Step1、首先A与B之间建立连接(通常是TCP,但还有其他的,如HTTP、管道等);
- Step2、然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
- Step3、B接受A发送过来的字节流,然后反序列化得到方法名,方法参数,接着执行相应的方法调用并把结果30返回;
- Step4、A接受远程调用结果,输出30。
通过上面的简单阐述,远程调用与socket通讯非常像啊,都是远程通讯,都是C/S模式。但是他们两者到底有啥区别?
- RPC在提供强大的远程调用能力的同时,不损失本地调用的语义简洁性。RPC一个重要思想就是:使远程调用看起来像本地调用一样。
- socket是RPC经常采用的通信手段之一,除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等。
完结!