战神联盟app
RPC(Remote Procedure Call 远程过程调用)是一种软件通信协议,一个程序可以使用该协议向位于网络上另一台计算机中的程序请求服务,而无需了解网络的详细信息。RPC 用于调用远程系统上的其他进程,如本地系统。过程调用有时也称为 函数调用或 子程序调用。
RPC 是一种客户端 - 服务器交互形式(调用者是客户端,执行者是服务器),通常通过请求 - 响应消息传递系统实现。与本地过程调用一样,RPC 是一种 同步 操作,需要阻塞请求程序,直到返回远程过程的结果。但是,使用共享相同地址空间的轻量级进程或 线程 可以同时执行多个 RPC。
应用场景:
有两台服务器,分别是服务器 C、服务器 D。在 服务器 C 上的应用 想要调用服务器 D上的应用,他们是不能进行本地的调用,但是通过走RPC的协议十分方便,就是调用本地函数的方式一样
- RPC和http协议之间的区别
RPC 是一种方法,而 HTTP 是一种协议,RPC长应用于TCP协议之上(同时也可以在http协议)
RPC 是远端过程调用,其调用协议通常包含:传输协议 和 序列化协议。
- 传输协议:著名的 grpc,它底层使用的是 http2 协议;还有 dubbo 一类的自定义报文的 tcp 协议。
- 序列化协议:基于文本编码的 json 协议;也有二进制编码的 protobuf、hession 等协议;还有针对 java 高性能、高吞吐量的 kryo 和 ftc 等序列化协议。
共同点: 都是client/server的架构
调用过程:
A.客户端调用客户端存根。该调用是本地过程调用,参数以正常方式压入堆栈。
B.客户端存根将过程参数打包到消息中并进行系统调用以发送消息。过程参数的打包称为编组。
C.客户端的本地操作系统将消息从客户端机器发送到远程服务器机器。
D.服务器操作系统将传入的数据包传递给服务器存根。
E.服务器存根从消息中解包参数 —— 称为解编组。
F.当服务器过程完成时,它返回到服务器存根,它将返回值编组为一条消息。然后服务器 存根将消息交给传输层。
G 传输层将生成的消息发送回客户端传输层,传输层将消息返回给客户端存根。
H客户端存根解组返回参数,然后执行返回给调用者。
- gRPC:跨语言 RPC 框架,支持多种语言。