概述
RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便。常见的RPC框架配带的功能有:
常见RPC框架有
本系列主要教大家如何实现RPC框架,使用的语音是C++,协议使用的是protobuf。
基于protobuf的RPC框架
这里不介绍具体protoc的使用方法,网上很多。在完成protoc编译后,会输出protobuf提供的服务框架中,主要有如下几个类
在整体框架实现上基本上集成protobuf提供的类即可,采用boost的socket进行通信,暂时考虑同步通信的情况。
对于服务端和客户端的通信协议上,采用的meta对象,用于记录过程调用的参数、具体service和method。
服务端设计
采用boost的socket,直接bind和监听,启动后则通过accept进行阻塞,对于每个请求进行解包,并在ProcRpcMsg函数中对具体业务操作函数的调用,并在业务操作函数完成后通过done->Run()回调OnCallbackDone实现数据回写。
在service的callmethod方法中,对具体method进行调用。
此外,在服务和过程的管理上,服务端建立了key-val的map来进行管理。
客户端设计
客户端相对简单,也是基于boost的socket进行connect、send、receive等同步的操作。
在echo例子中,我们通常调用stub的函数,stub调用channel的Callmethod函数,因此我的操作需要在Channel::CallMethod中进行实现。
总结
本文简单介绍了基于protobuf的rpc框架实现,都是使用同步模型且单线程形式。这个程序在状态控制、并发高等上还不够,下篇文章讲如何提升收发效率。
代码路径:https://github.com/thszhong/srpc
原文:https://www.cnblogs.com/thsss/p/12634381.html