grpc helloworld cpp源码分析001


生成数据结构和服务接口代码:
protoc --cpp_out=./ helloworld.proto
protoc --grpc_out=./ --plugin=protoc-gen-grpc="/C:/Program Files/grpc/bin/grpc_cpp_plugin.exe" helloworld.proto

protoc生成代码分析
客户端连接服务端 调用服务端的sayhello同步接口

helloworld.pb.h: 
Generated by the protocol buffer compiler通信数据结构定义,用于通信前后数据的正反序列化/helloworld.pb.cc实现代码
request
请求封装 new protobuf数据转换 protobuf::Metadata元数据接口转换 可以理解为rttr反射获取结构体的方法 字段类型
Reply

helloworld.grpc.pb.h 
Generated by the gRPC C++ plugin.
服务接口定义 Greeter::Service 
服务定义
连接
断开
核心接口
async_interface 还生成了异步接口
支持了两种回调:
 std::function<void(::grpc::Status)>
::grpc::ClientUnaryReactor* reactor
异步接口在实际做完事情后会调用相应private的ClientAsyncResponseReaderInterface 回调client传输的接口

Server代码分析:
absl std标准库增强库
Strings:提供了一套更方便、更易于使用的字符串处理工具,包括字符串分割、连接、替换、格式化等功能。
Containers:包含了一些新的容器类,如 flat_hash_map、flat_hash_set,它们提供了更高效的哈希表实现。
Algorithm:提供了一些常用算法的实现,如 StrSplit()、StrJoin(),以及其他一些便利性函数。
Time:提供了一套用于处理时间和日期的工具,包括时钟、时间间隔计算、格式化等。
Debugging:提供了一些调试工具,如断言、日志记录、内存泄漏检查等。

反射插件 
proto_server_reflection_plugin.h
健康检查
health_check_service_interface.h
grpc头文件
grpcpp.h

接口头文件
helloworld.grpc.pb.h
 

核心接口:
实现测
class GreeterServiceImpl final : public Greeter::Service {
  Status SayHello(ServerContext* context, const HelloRequest* request,
                  HelloReply* reply) override {
服务定义的同步sayhello接口实现
context, 额外参数解析
request, 原始请求解析

Status SayHello(ServerContext* context, const HelloRequest* request,
                  HelloReply* reply) override {

客户端代码分析:
服务端ip端口定义和解析
通过服务端ip端口创建通道 这里创建了一个不安全的通道 通道里创建了一个存根/stub
grpc::InsecureChannelCredentials
通过通道调用客户端sayhello接口
请求体
接收体
额外信息
stub远程过程调用sayhello
状态判断 
消息解析//处理

客户端和服务端的几个接口定义和接口处理逻辑
写业务代码也可参考

ip端口解析-创建通道-构造存根/session封装-调用接口
序列化数据请求体-调用接口----接收接收体---反序列化接收体

官方给的图里
1 发起调用
2 序列化
3 socket session 发起网络接口
4 请求体反序列化
5 处理请求/本地业务逻辑:螺丝钉关注点
6 返回体序列化
7 socket 回传客户端/同步、异步
8 返回体反序列化
9 本地业务逻辑处理:螺丝钉关注点

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值