Grpc简介
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grpc简介相关的知识,希望对你有一定的参考价值。
前言
最近公司要使用grpc写公共服务(可以在每个参产品都能用得上),本文参考了其他文章写了grpc简介,后面会发布python和java两种语言如何使用grpc做通信
Grpc简介
一. 了解gRPC
-
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,可以在任何地方运行。它使客户端和服务器应用程序能够透明地通信,并使构建连接系统变得更加容易。.
-
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
1.1 为什么使用
主要使用场景:
- 低延迟、高度可扩展的分布式系统。
- 开发与云服务器通信的移动客户端。
- 设计一个需要准确、高效和独立于语言的新协议。
- 分层设计以实现扩展,例如。身份验证,负载平衡,日志记录和监控等。
二. protobuf作用
- grpc传输协议传输的数据类型为protobuf数据.ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。压缩和传输效率高,语法简单,表达力强。所以grpc都是和protobuf一块使用。
- protobuf Buffers叫做协议缓冲区语言(包括
.proto
文件语法),使用它构建协议缓冲区数据,从.proto
文件中生成数据访问类使用。
2.1 .proto文件示例
syntax = "proto3";
service Greeter
rpc SayHello (HelloRequest) returns (HelloReply)
// 请求消息。
message HelloRequest
string name = 1;
// 响应信息
message HelloReply
string message = 1;
2.2 标量值类型
标量消息字段可以具有以下类型之一:该表显示 .proto
文件中指定的类型,以及自动生成的类中的相应类型:
本人只拿了python,java,c,go的类型
.proto Type | Notes | Java/Kotlin Type[1] | Python Type[3] | Go Type | C# Type |
---|---|---|---|---|---|
double | double | float | float64 | double | |
float | float | float | float32 | float | |
int32 | 使用可变长度的编码。对负数的编码效率低下 - 如果您的字段可能包含负值,请改用 sint32。 | int | int | int32 | int |
int64 | 使用可变长度的编码。对负数的编码效率低下 - 如果字段可能有负值,请改用 sint64。 | long | int/long[4] | int64 | long |
uint32 | 使用可变长度的编码。 | int[2] | int/long[4] | uint32 | uint |
uint64 | 使用可变长度的编码。 | long[2] | int/long[4] | uint64 | ulong |
sint32 | 使用可变长度的编码。有符号整数值。与常规 int32 相比,这些函数可以更高效地对负数进行编码。 | int | int | int32 | int |
sint64 | 使用可变长度的编码。有符号整数值。与常规 int64 相比,这些函数可以更高效地对负数进行编码。 | long | int/long[4] | int64 | long |
fixed32 | 始终为 4 个字节。如果值通常大于 228,则比 uint32 更高效。 | int[2] | int/long[4] | uint32 | uint |
fixed64 | 始终为 8 个字节。如果值通常大于 256,则比 uint64 更高效。 | long[2] | int/long[4] | uint64 | ulong |
sfixed32 | 始终为 4 个字节。 | int | int | int32 | int |
sfixed64 | 始终为 8 个字节。 | long | int/long[4] | int64 | long |
bool | boolean | bool | bool | bool | |
string | 字符串必须始终包含 UTF-8 编码或 7 位 ASCII 文本,并且长度不得超过2的32次幂。 | String | str/unicode[5] | string | string |
bytes | 可以包含任意长度的 2的32次幂 字节。 | ByteString | str (Python 2) bytes (Python 3) | []byte | ByteString |
三. 参考文章
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Grpc简介的主要内容,如果未能解决你的问题,请参考以下文章