一、前言
本文介绍从零实现 Json-RPC 框架的项目,基于 C++、JsonCpp、muduo 网络库实现一个简单、易用的 RPC 通信框架。即使是不懂网络的开发者也可以快速上手,它实现了同步调用、异步 callback 调用、异步 future 调用、服务注册/发现,服务上线/下线以及发布订阅等功能设计。
二、正文
1.项目介绍
RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。RPC可以使用多种网络协议进行通信,如 HTTP、TCP、UDP 等,并且在 TCP/IP 网络四层模型中跨越了传输层和应用层。简言之 RPC 就是像调用本地方法一样调用远程方法。过程可以理解为业务处理、计算任务,更直白地说,就是程序/方法/函数等,就是像调用本地方法一样调用远程方法。

举个形象的例子:
本地过程调用:恋爱对象在你的身边,可以随时约对象吃饭、看电影、约会等等
远端过程调用:好像异地恋一样,隔着千山万水,如果想约会,需要先和对象进行约定,在坐火车/飞机赶到约定的地点
一个完整 RPC 通信框架,大概包含以下内容:
• 序列化协议 • 通信协议 • 连接复用 • 服务注册 • 服务发现 • 服务订阅和通知 • 负载均衡 • 服务监控 • 同步调用 • 异步调用
2.技术选型
①.目前 RPC 的实现方案有两种:
★client 和 server 继承公共接口
根据 IDL(接口定义语言)定义公共接口 ◦ 编写代码生成器根据 IDL 语言生成相关的 C++、Java 代码 ◦ 然后我们的客户端和服务器程序共同向上继承公共接口即可 ◦ 比如我们常用的 Protobuf、json 可以定义 IDL 接口,并生成 RPC 相关的代码 ◦ 缺点:使用 pb 因为生成一部分代码,所以对理解不够友好;如果是 json 定义 IDL 语言需要自己编写代码生成器难度较大一点,暂不考虑这种方案
注:IDL(Interface Definition Language,接口定义语言,用于描述服务接口)


