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;
}
三、编译命令,需要编译成protobuf的cpp和grpc的cpp
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函数能够读取的格式包含: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是改成:standard还是chinese都无法实现中文分词。 处理中文分词一般采用IK分词器 安装链接&…...
Git设置显示中文
git config --global i18n.comitencoding utf-8 git config --global i18n.logoutputencoding utf-8 export LESSCHARSETutf-8...
数实结合的复杂电磁环境构建解决方案
数实结合的复杂电磁环境构建解决方案 数实结合的复杂电磁环境构建 目前无线收发设备面临的电磁环境愈发恶劣。为了检验设备在复杂电磁环境下的实际工作性能,需进行各种应用条件下的测试和试验。外场测试难以提供各种应用环境,存在测试周期长、成本高、难…...
MySQL geometry 类型数据测试
MySQL的geometry类型的表的创建和测试: 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代码 摘要:本文主要介绍利用袋獾算法来优化无人机航迹规划。 1.袋獾搜索算法 …...
2024上海智博会,上海国际智慧城市,物联网,大数据展会(世亚智博会)
中国国际智慧城市,物联网,大数据博览会(简称:世亚智博会)自2010年创办以来,至今已成功举办十多届。世亚智博会是中国较高、规模较大、影响力较广的展会;是被国际业界公认的不可错过的名展之一。随着世亚智博会的国际地位和影响不断…...
家庭教育质量提升成未来教育关注重点
随着教育改革的不断深化,家校合作模式也在实践中不断探索和丰富。 11 月 6 日,第六届长三角家校合作论坛于上海杨浦盛大开幕,此次论坛围绕“家校协同与人的学校领导”这一主题展开深度研讨。论坛旨在交流和分享相关经验及做法,以…...
python入门系列(1)—— 环境安装
前言 社区里面有好多同学想要入门python,可能源于以下原因: 易学性:Python 的语法简洁、清晰,容易理解和上手,使得初学者能够轻松入门编程。无论是编写基本的脚本还是进行更复杂的开发,Python 都提供了友…...
react组件通信
目录 前言: 父子组件通信 子父组件通信 兄弟组件通信 总结 前言: React是一种流行的JavaScript库,用于构建现代化的、高性能的Web应用程序。在React中,组件是代码的构建块。组件通信是React中一个非常重要的概念,…...
学习笔记|Pearson皮尔逊相关系数|Spearman斯皮尔曼相关系数|和Kendall肯德尔tau-b相关系数|分析流程|-SPSS中双变量相关性分析系数
目录 学习目的软件版本原始文档基础概念皮尔逊相关系数基本假设(适用条件):系数的范围及意义实例1. 读数据:2.正态性检验:3.异常值检验(体重):4.分析: 斯皮尔曼相关系数基…...
计算机服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复
随着网络技术的不断成熟,网络中存在的病毒威胁也不断增多,近期,云天数据恢复中心陆续接到很多企业的求助,企业的计算机服务器数据库遭到了勒索病毒攻击,并且勒索病毒的攻击与加密形式也发生了许多变化。其中攻击次数较…...
本地生活餐饮视频怎么拍摄能有更多流量?如何批量生产呢?
本地生活近几年特别的火,所以到现在各类内容雷同性也比较高,视频缺少新的创意和玩法,像餐饮店的视频,大部分都是拍顾客进门、拍餐饮店座无虚席的实景……作为用户,其实早就已经看腻了。 今天推荐本地生活餐饮店商家拍…...
【笔记】原型和原型链(持续完善)
概念 原型:函数都具有 prototype 属性,称之为原型,也称之为原型对象 1.1 原型可以放一些属性和方法,共享给实例对象使用(也就是原生方法)。 1.2 原型可以做继承原型链:对象都有 __proto__ 属性…...
python向word中添加表格
1、表格插入 方法一:直接创建表添加 #导入库 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. 查询所有列 题目链接:SQL1 查询所…...
Redis系列-Redis性能优化与安全【9】
目录 Redis系列-Redis性能优化与安全【9】Redis性能优化策略Redis安全设置与防护措施Redis监控与诊断工具介绍 七、Redis应用案例与实战八、Redis未来发展与趋势 个人主页: 【⭐️个人主页】 需要您的【💖 点赞关注】支持 💯 Redis系列-Redis性能优化与安…...
centos7下安装主从仲裁三台结构的MongoDB 7.0.4
安装手册英文版在这里 https://www.mongodb.com/docs/v7.0/tutorial/install-mongodb-on-red-hat/ 我的安装过程 1)基础安装 1、创建 /etc/yum.repos.d/mongodb-org-7.0.repo文件 下面的代码复制到这个文件中,保存 [mongodb-org-7.0] nameMongoDB Re…...
2258. 逃离火灾 : 详解如何从「二分」到「分类讨论」(图解过程)
题目描述 这是 LeetCode 上的 「2258. 逃离火灾」 ,难度为 「困难」。 Tag : 「多源 BFS」、「二分」、「预处理」 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid,它表示一个网格图。 每个格子为下面 个值之一: 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; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
全面解析各类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? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 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,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...
