当前位置: 首页 > news >正文

c++ grpc 第一个用例

一、linux 包管理工具安装

sudo apt-get update
sudo apt-get install -y build-essential autoconf libtool pkg-config cmake
sudo apt-get install -y libgflags-dev libgtest-dev
sudo apt-get install -y clang libc++-dev# 安装 gRPC C++ 相关依赖
sudo apt-get install -y libgrpc++-dev
# 安装 gRPC 编译工具
sudo apt-get install -y protobuf-compiler-grpc

二、编写proto

syntax = "proto3";service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}
}message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}

三、编译命令,需要编译成protobufcppgrpccpp

protoc --proto_path=./ --grpc_out=./ --cpp_out=./ --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ./h.proto

四、服务端

#include <iostream>
#include <grpcpp/grpcpp.h>
#include "h.pb.h"
#include "h.grpc.pb.h"// 定义一个最终类,继承定义的 Greeter::Service服务端
class GreeterServiceImpl final : public Greeter::Service {// 重写父类的函数,基于 proto 增加了一个参数 ::grpc::ServerContext* context::grpc::Status SayHello(::grpc::ServerContext* context, const HelloRequest* request, HelloReply* reply) override {std::string prefix("Hello ");// 设置返回值reply->set_message(prefix + request->name());return ::grpc::Status::OK;}
};int main(){// 定义一个字符串,地址std::string server_address("0.0.0.0:50051");// 实例化最终类GreeterServiceImpl service;// grpc 的服务端::grpc::ServerBuilder builder;// grpc 服务端设置地址builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());// grpc 注册服务builder.RegisterService(&service);// 开启服务std::unique_ptr<::grpc::Server> server(builder.BuildAndStart());// 服务一直开启server->Wait();return 0;
}

编译:g++ h.grpc.pb.cc server.cpp h.pb.cc -lprotobuf

五、客户端

#include <iostream>
#include <grpcpp/grpcpp.h>
#include "h.pb.h"
#include "h.grpc.pb.h"void run_grpc_client() {// 建立链接,可以设置模式std::shared_ptr<grpc::Channel> channel = grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials());// 建立服务std::unique_ptr<Greeter::Stub> stub = Greeter::NewStub(channel);   // Greeter 服务名称// 实例化输入HelloRequest request;request.set_name("Your Name"); // 设置请求参数// 实例化响应服务grpc::ClientContext context;// 实例化 输出HelloReply reply;// 获取服务响应grpc::Status status = stub->SayHello(&context, request, &reply);   // SayHello rpc函数名称if (status.ok()) {std::cout << "Server said: " << reply.message() << std::endl;} else {std::cout << "gRPC call failed with error code: " << status.error_code() << " - " << status.error_message() << std::endl;}
}int main() {run_grpc_client();return 0;
}

编译:g++ h.grpc.pb.cc client.cpp h.pb.cc -lprotobuf -lgrpc++

http://www.lryc.cn/news/223389.html

相关文章:

  • pandas笔记:读写excel
  • 【ES分词】
  • Git设置显示中文
  • 数实结合的复杂电磁环境构建解决方案
  • MySQL geometry 类型数据测试
  • 基于袋獾算法的无人机航迹规划-附代码
  • 2024上海智博会,上海国际智慧城市,物联网,大数据展会(世亚智博会)
  • 家庭教育质量提升成未来教育关注重点
  • python入门系列(1)—— 环境安装
  • react组件通信
  • 学习笔记|Pearson皮尔逊相关系数|Spearman斯皮尔曼相关系数|和Kendall肯德尔tau-b相关系数|分析流程|-SPSS中双变量相关性分析系数
  • 计算机服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复
  • 本地生活餐饮视频怎么拍摄能有更多流量?如何批量生产呢?
  • 【笔记】原型和原型链(持续完善)
  • python向word中添加表格
  • 2023_11_6 每日半小时 SQL 刷题
  • Redis系列-Redis性能优化与安全【9】
  • centos7下安装主从仲裁三台结构的MongoDB 7.0.4
  • 2258. 逃离火灾 : 详解如何从「二分」到「分类讨论」(图解过程)
  • 基于SSM框架的共享单车管理系统小程序系统的设计和实现
  • COOHOM通过采用亚马逊云科“专库专用”的方式,为云原生的构建提供稳定的数据支撑
  • Java根据一个List内Object的两个字段去重
  • 运维那些事儿|2023年,运维还有出路吗?
  • 数据结构——二叉树(2)
  • aosp定制android系统
  • 程序员的护城河:构建数字世界的守护者
  • Sample Average Approximation,SAA
  • springbootMysql文华学院青年志愿者服务预约系统97973-计算机毕业设计项目选题推荐(附源码)
  • Go 语言向函数传递数组
  • 高压放大器在铁电测试中的用途有哪些