Giter VIP home page Giter VIP logo

grpc-blog's Introduction

grpc

grpc-blog's People

Contributors

rsahwzl avatar

Watchers

 avatar

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 photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.