grpc-blog's Introduction
grpc-blog's People
grpc-blog's Issues
start
grpc简介
1.gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2设计
2.目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go
3.其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持
4.gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性
5.HTTP1,文本传输数据,每个请求都需建立tcp连接(等待请求返回才顺序执行下一个请求)
6.HTTP2,二进制传输数据,同一地方的多次请求只需建立一次tcp连接(多路复用),头部数据压缩(内容相同二次请求复用),服务端可主动推送数据至客户端
为什么使用 gRPC?
我们的例子是一个简单的路由映射的应用,它允许客户端获取路由特性的信息,生成路由的总结,以及交互路由信息,如服务器和其他客户端的流量更新。
有了 gRPC, 我们可以一次性的在一个 .proto 文件中定义服务并使用任何支持它的语言去实现客户端和服务器,反过来,它们可以在各种环境中,
从Google的服务器到你自己的平板电脑—— gRPC 帮你解决了不同语言及环境间通信的复杂性.使用 protocol buffers 还能获得其他好处,包括高效的序列号,简单的 IDL 以及容易进行接口更新。
个人理解:可以写一套service,通过proto文件生成不同语言的代码执行。微服务中,可以分为几个模块执行,各个模块间异常情况互不干扰,
各个模块可以使用不同的语言执行(可以利用不同语言的特点进行service最大化利用)
goland的grpc环境搭建(windows环境)
1.先安装Protobuf 编译器 protoc,下载地址:https://github.com/google/protobuf/releases,解压缩得到protoc.exe(可以把proto编译成其他语言),放置于GOPATH/bin下
2.获取protobuf编解码支持库,go get -u github.com/golang/protobuf/proto
3.编辑成go的插件,旧版本go get -u github.com/golang/protobuf/protoc-gen-go,go1.18以上版本go install google.golang.org/protobuf/cmd/protoc-gen-go@latest,go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
4.引入grpc支持,go get google.golang.org/grpc
proto语法简介
package用于proto,在引用时起作用;option go_package用于生成的.pb.go文件,在引用时和生成go包名时起作用
go_package(ex: option go_package="github.com/yourPackagePath;package")
这里逗号(;)
后面是就是生成go代码时,package名
前面是生成代码时,如果其他proto 引用 了这个proto,那么他们就会使用逗号(;)前面的作为go包路径
末尾以;结尾(rpc方法可不加)
- message:定义结构体(类似于go的struct)
- 字段名一般使用_命名方式,标签范围(1-2^29-1),19000-19999除外(内部协议缓冲区使用),顺序可以打乱(但必须唯一)
- 标签1-15的字段编码仅占用1byte,16-2047占用2byte
- repeated:修饰字段(可重复出现,数组、map等)
- oneof:修饰字段(多个申明的字段使用时只会有一个被使用)
- service:定义方法
- rpc:方法名修饰符
- stream:流式服务修饰符
protoc编译
旧版本使用 protoc --go_out=plugins=grpc:. *.proto 命令生成pb.go文件(带pb和grpc),使用时实现interface的方法
- go1.18以上使用protoc --go_out=./ --go-grpc_out=. *.proto命令生成pb.go和pb_grpc.go文件(带pb和grpc)
- proto文件import了外部proto,若两个文件不在一个目录,要指定proto_path目录简写-I,ex:
protoc -I ..\..\third_party\ -I ./ --go_out=./ --go-grpc_out=paths=source_relative:. --go-http_out=. user.proto
,其中paths=source_relative:.(指定pb.go和proto在同一目录)
grpc服务的创建
grpc请求的"Content-Type", "application/grpc"
可以创建rpc,http服务,使用grpc-gateway可以同步生成pb.go(用于rpc服务,监听tcp端口)和gw.pb.go(用于http请求)
grpc的流式服务
对rpc请求方法操作,客户端流式服务(请求参数前+stream),服务端流式服务(返回值前+stream),双向流式服务(请求参数、返回值+stream)
stream方法:Send(),CloseSend(),Recv(),CloseAndRecv()等等
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.