当前位置: 首页 > 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++

相关文章:

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 …...

pandas笔记:读写excel

1 读excel read_excel函数能够读取的格式包含&#xff1a;xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件扩展名。 支持读取单一sheet或几个sheet。 1.0 使用的数据 1.1 主要使用方法 pandas.read_excel(io, sheet_name0, header0, namesNone, index_colNone, usecolsNon…...

【ES分词】

分词 #测试分词器 POST /_analyze {"text": "小米手机和华为手机都是国产mobilephone", "analyzer": "english" }不管analyzer是改成&#xff1a;standard还是chinese都无法实现中文分词。 处理中文分词一般采用IK分词器 安装链接&…...

Git设置显示中文

git config --global i18n.comitencoding utf-8 git config --global i18n.logoutputencoding utf-8 export LESSCHARSETutf-8...

数实结合的复杂电磁环境构建解决方案

数实结合的复杂电磁环境构建解决方案 数实结合的复杂电磁环境构建 目前无线收发设备面临的电磁环境愈发恶劣。为了检验设备在复杂电磁环境下的实际工作性能&#xff0c;需进行各种应用条件下的测试和试验。外场测试难以提供各种应用环境&#xff0c;存在测试周期长、成本高、难…...

MySQL geometry 类型数据测试

MySQL的geometry类型的表的创建和测试&#xff1a; CREATE TABLE geom_test01( id INT NOT NULL PRIMARY KEY, info varchar(100), geom GEOMETRY ); desc geom_test01; insert into geom_test01 (id,info,geom) values (1, geom, geomfromtext(MULTIPOLYGON(((1 1…...

基于袋獾算法的无人机航迹规划-附代码

基于袋獾算法的无人机航迹规划 文章目录 基于袋獾算法的无人机航迹规划1.袋獾搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用袋獾算法来优化无人机航迹规划。 1.袋獾搜索算法 …...

2024上海智博会,上海国际智慧城市,物联网,大数据展会(世亚智博会)

中国国际智慧城市,物联网,大数据博览会&#xff08;简称:世亚智博会&#xff09;自2010年创办以来&#xff0c;至今已成功举办十多届。世亚智博会是中国较高、规模较大、影响力较广的展会&#xff1b;是被国际业界公认的不可错过的名展之一。随着世亚智博会的国际地位和影响不断…...

家庭教育质量提升成未来教育关注重点

随着教育改革的不断深化&#xff0c;家校合作模式也在实践中不断探索和丰富。 11 月 6 日&#xff0c;第六届长三角家校合作论坛于上海杨浦盛大开幕&#xff0c;此次论坛围绕“家校协同与人的学校领导”这一主题展开深度研讨。论坛旨在交流和分享相关经验及做法&#xff0c;以…...

python入门系列(1)—— 环境安装

前言 社区里面有好多同学想要入门python&#xff0c;可能源于以下原因&#xff1a; 易学性&#xff1a;Python 的语法简洁、清晰&#xff0c;容易理解和上手&#xff0c;使得初学者能够轻松入门编程。无论是编写基本的脚本还是进行更复杂的开发&#xff0c;Python 都提供了友…...

react组件通信

目录 前言&#xff1a; 父子组件通信 子父组件通信 兄弟组件通信 总结 前言&#xff1a; React是一种流行的JavaScript库&#xff0c;用于构建现代化的、高性能的Web应用程序。在React中&#xff0c;组件是代码的构建块。组件通信是React中一个非常重要的概念&#xff0c;…...

学习笔记|Pearson皮尔逊相关系数|Spearman斯皮尔曼相关系数|和Kendall肯德尔tau-b相关系数|分析流程|-SPSS中双变量相关性分析系数

目录 学习目的软件版本原始文档基础概念皮尔逊相关系数基本假设&#xff08;适用条件&#xff09;&#xff1a;系数的范围及意义实例1. 读数据&#xff1a;2.正态性检验&#xff1a;3.异常值检验&#xff08;体重&#xff09;&#xff1a;4.分析&#xff1a; 斯皮尔曼相关系数基…...

计算机服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复

随着网络技术的不断成熟&#xff0c;网络中存在的病毒威胁也不断增多&#xff0c;近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器数据库遭到了勒索病毒攻击&#xff0c;并且勒索病毒的攻击与加密形式也发生了许多变化。其中攻击次数较…...

本地生活餐饮视频怎么拍摄能有更多流量?如何批量生产呢?

本地生活近几年特别的火&#xff0c;所以到现在各类内容雷同性也比较高&#xff0c;视频缺少新的创意和玩法&#xff0c;像餐饮店的视频&#xff0c;大部分都是拍顾客进门、拍餐饮店座无虚席的实景……作为用户&#xff0c;其实早就已经看腻了。 今天推荐本地生活餐饮店商家拍…...

【笔记】原型和原型链(持续完善)

概念 原型&#xff1a;函数都具有 prototype 属性&#xff0c;称之为原型&#xff0c;也称之为原型对象 1.1 原型可以放一些属性和方法&#xff0c;共享给实例对象使用&#xff08;也就是原生方法&#xff09;。 1.2 原型可以做继承原型链&#xff1a;对象都有 __proto__ 属性…...

python向word中添加表格

1、表格插入 方法一&#xff1a;直接创建表添加 #导入库 from docx import Document #创建文档对象 document Document()#创建5行7列表格 table document.add_table(rows5, cols7)#修改第2行第3列单元格的内容为中国 table.cell(1,2).text中国 #修改第3行第4列单元格的内容…...

2023_11_6 每日半小时 SQL 刷题

文章目录 1. 查询所有列题目描述SQL 语句编写 2. 查询多列题目描述SQL 语句编写 3. 查询结果去重题目描述SQL 语句编写 4. 查询结果限制返回行数题目描述SQL 语句编写 5. 将查询后的列重新命名题目描述SQL 语句编写 语法小总结 1. 查询所有列 题目链接&#xff1a;SQL1 查询所…...

Redis系列-Redis性能优化与安全【9】

目录 Redis系列-Redis性能优化与安全【9】Redis性能优化策略Redis安全设置与防护措施Redis监控与诊断工具介绍 七、Redis应用案例与实战八、Redis未来发展与趋势 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; Redis系列-Redis性能优化与安…...

centos7下安装主从仲裁三台结构的MongoDB 7.0.4

安装手册英文版在这里 https://www.mongodb.com/docs/v7.0/tutorial/install-mongodb-on-red-hat/ 我的安装过程 1&#xff09;基础安装 1、创建 /etc/yum.repos.d/mongodb-org-7.0.repo文件 下面的代码复制到这个文件中&#xff0c;保存 [mongodb-org-7.0] nameMongoDB Re…...

2258. 逃离火灾 : 详解如何从「二分」到「分类讨论」(图解过程)

题目描述 这是 LeetCode 上的 「2258. 逃离火灾」 &#xff0c;难度为 「困难」。 Tag : 「多源 BFS」、「二分」、「预处理」 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid&#xff0c;它表示一个网格图。 每个格子为下面 个值之一&#xff1a; 0 表示草地。 1 表…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

VSCode 使用CMake 构建 Qt 5 窗口程序

首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?

在现代前端开发中&#xff0c;Utility-First (功能优先) CSS 框架已经成为主流。其中&#xff0c;Tailwind CSS 无疑是市场的领导者和标杆。然而&#xff0c;一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...