ProtoBuf中service使用

在 Protocol Buffers 的 proto3 语法中,service 用于定义一个 gRPC 服务。一个 service 包含了一组可以远程调用的 RPC 方法,每个方法有请求类型和响应类型。

基本语法

syntax = "proto3";service ServiceName {rpc MethodName(RequestType) returns (ResponseType);
}// service ServiceName:定义服务的名称。
// rpc MethodName:定义 RPC 方法的名称。
// RequestType:请求消息类型。
// ResponseType:响应消息类型。

示例

下面是一个完整的proto3示例文件,定义了一个基于Chord的简单gRPC服务。

syntax = "proto3";package protos;// DHT Common RPCsmessage Key {string key = 1;
}message Pair {string key = 1;string value = 2;
}message Result {string result = 1;
}message Void {}message ControlRequest {string control = 1;
}// Chord RPCsmessage  FindSuccessorRequest {bytes id = 1;
}message  Node {bytes id = 1;string addr = 2;
}service Chord {rpc FindSuccessor (FindSuccessorRequest) returns (Node) {}rpc Notify (Node) returns (Result) {}rpc FindPredecessor (Node) returns (Node) {}rpc Ping (Node) returns (Void){}}

带有流式的RPC的实例

proto3 还支持流式 RPC 方法,包括客户端流、服务端流和双向流:

syntax = "proto3";package proto3;// 请求消息类型
message StreamRequest {string data = 1;
}// 响应消息类型
message StreamResponse {string data = 1;
}// 定义一个带有流式 RPC 的 gRPC 服务
service Streamer {// 单向流,从客户端流向服务端rpc ClientStream (stream StreamRequest) returns (StreamResponse);// 单向流,从服务端流向客户端rpc ServerStream (StreamRequest) returns (stream StreamResponse);// 双向流,客户端和服务端都可以发送和接收流rpc BidirectionalStream (stream StreamRequest) returns (stream StreamResponse);
}

stream 关键字用于表示流式 RPC。

ClientStream 是客户端流式 RPC,客户端发送流数据,服务端返回单个响应。

ServerStream 是服务端流式 RPC,客户端发送单个请求,服务端返回流数据。

BidirectionalStream 是双向流式 RPC,客户端和服务端都可以发送和接收流数据。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线

红队内网攻防渗透 1. 内网隧道技术1.1 Frp内网穿透C2上线1.1.1 双网内网穿透C2上线1.1.1.1 服务端配置1.1.1.2 客户端配置1.1.2 内网穿透信息收集1.1.2.1、建立Socks节点(入站没限制采用)1.1.2.2 主动转发数据(出站没限制采用)1.2 Nps内网穿透工具1.2.1 NPS内网穿透C2上线1…

Python —— JSON

一文搞懂JSON-CSDN博客 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将数据结构化地传输和存储。它由键值对组成,采用类似于JavaScript对象的格式来表示数据。JSON易于阅读和编写,并且易于解析…

python学习笔记-10

面向对象编程-下 1.私有化属性 语法:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。 使用私有化属性的场景: 1.把特定的一个属性隐藏起来,不让类的外部进行直接调用。 2.不让属性的值随意改变。…

关于package.json与lock文件依赖版本的一些问题

问题的出现 有几次项目部署完毕在线上运行时,测试人员发现某些组件的效果出现异常,比如某些在弹窗modal内的popup弹框的层级异常,显示在了modal底下,或者某个组件(如modal的footer区域的类样式)出现多个cs…

Java中的API设计与文档生成最佳实践

Java中的API设计与文档生成最佳实践 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,设计良好的API(Application Program…

轻量级服务器内存不够编译的情况解决方案(以安装Ta-Lib库为例)

安装 TA-Lib 时遇到的问题通常与系统缺少必要的编译依赖项或者内存不足有关。以下是一些解决步骤,你可以按照这些步骤尝试解决问题: 问题描述:编译安装Tal-ib库出现以下问题: root@tianbaobao12:~/shipan/ta-lib# pip install ta-lib Collecting ta-libUsing cached TA-L…

微信发布分班查询结果

亲爱的老师们!期末考完,新学期就快要来了,还在为分班查询头疼吗?别担心,今天我要和大家分享一个超级实用的小技巧——如何通过微信发布分班查询结果,让家长们和学生们都能掌握新学期的动态? 分…

“深入了解Redis缓存:探索Redis 6的新数据类型“

目录 1. 介绍 2. Bitmaps(可以称为字符串,专门进行位操作的字符串) 2.1 概念 2.2 setbit(设置Bitmaps中某个偏移量的值) 2.3 getbit(获取Bitmaps中某个偏移量的值) 2.4 bitcount&#xff…

【Python】神经网络回归预测模型,Python代码实现

场景描述:基于物联网检测设备,大量采集流量数据和液位高度数据存储在时序数据库(influxdb)中。并采用下面代码对数据进行预测 #!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:李智敏 # Wechat:anark919 # Date:2024-01-05 10:17 # Title: imp…

【C语言】16.动态内存管理

文章目录 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2 realloc 4.常见的动态内存的错误4.1 对NULL指针的解引⽤操作4.2 对动态开辟空间的越界访问4.3 对⾮动态开辟内存使⽤free释放4.4 使⽤free释放⼀块动态开辟内存的⼀部分4.5…

Golang - 连接MySQL执行查询脚本

脚本如下,简单易用: package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm" )type BaseID struct {ID int64 gorm:"primaryKey" json:"id" }type Tasks struct {BaseIDUUID string…

初识 GPT-4 和 ChatGPT

文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界:在这个世界里,你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验?你可以创造出什么样的应用程序?这正是…

【PS】提取手写签名

准备工具: 纸张:用于承载签名; 笔:用于签名; 手机:用于拍摄签名; Adobe Photoshop 版本: 12.0.3 (12.0.3x20101211 [20101211.r.1222 2010/12/11:02:00:00 cutoff; r branch]) x32:用…

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗?

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗? 今天亚足联官方宣布了世预赛18强赛分组抽签仪式时间,本次抽签仪式将于6月27日15点在马来西亚吉隆坡举行。除了抽签时间之外,足联还…

IMU用于飞行坐姿校正

为了提升长途飞行的舒适度并预防乘客因不良坐姿导致的身体不适,来自荷兰上海两所大学的研究团队携手开发出一种创新的“舒适穿戴”设备,专为识别飞行中的坐姿设计。 研究团队制作了两种原型设备:一种追求极致舒适,另一种为紧身设…

FFmpeg源码:AV_RB32宏定义分析

一、AV_RB32宏定义的作用 AV_RB32是FFmpeg源码中经常出现的一个宏,其定义如下: #ifndef AV_RB32 # define AV_RB32(p) AV_RB(32, p) #endif 该宏定义有多层。把它简化为函数,其函数声明可以等价于: uint32_t AV_RB32(uint…

windows下 nodejs升级版本

使用n升级node,需要安装git或安装linux支撑组件,后来在网上找资料 直接下载node.exe覆盖原文件即可。 升级步骤如下: 1.查看当前node版本 node -v 2.下载相应版本的nodejs,网址是nodejs下载,找个你想要的版本下载node.exe 3.找到你node的安装…

在C#中对 JSON进行序列化和反序列化处理

概述:在现代软件开发领域,不同系统和平台之间的数据交换是不可或缺的方面。JSON(JavaScript 对象表示法)因其轻量级、人类可读和易于解析的特性而成为一种无处不在的数据格式。使用 C# 🚀编程的 JSON 序列化和反序列化…

Scala学习笔记14: 模式匹配和样式类

目录 第十四章 模式匹配和样式类1- 模式匹配2- 模式中的变量3- 类型模式4- 匹配数组、列表和元组等集合5- 样例类6- 守卫7- 提取器8- 变量声明中的模式9- for推导式中的模式end 第十四章 模式匹配和样式类 在Scala中, 模式匹配和样例类是强大的功能, 用于处理复杂的数据结构和…

虚拟现实(VR)游戏与增强现实(AR)游戏的区别

随着科技的飞速发展,沉浸式游戏体验已经成为现代娱乐的重要组成部分。虚拟现实(VR)游戏和增强现实(AR)游戏是这类体验中的两大主流,但它们在技术实现、用户体验和应用场景上有显著的区别。本文将详细探讨VR…