网站认证金额怎么做分录,网络平台推广案例,wordpress博客价格,公司主页怎么填范本为什么使用grpc 1.protocl buffer一种高效的序列化结构。 2.支持http 2.0标准化协议。 http/2 1.http/2对每个源只需创建一个持久连接#xff0c;在这一个连接内#xff0c;可以并行的处理多个请求和响应#xff0c;而且做到不相互影响。 2.允许客户端和服务端实现自己的数据… 为什么使用grpc 1.protocl buffer一种高效的序列化结构。 2.支持http 2.0标准化协议。 http/2 1.http/2对每个源只需创建一个持久连接在这一个连接内可以并行的处理多个请求和响应而且做到不相互影响。 2.允许客户端和服务端实现自己的数据流和连接流控制这对我们传输大数据非常有帮助。 安装 grpc 与 protobuf 解释器 这里我们需要使用 protobuf 解释器 将 protobuf 语法的代码转化成对应语言的代码以及使用 grpc 实现跨越性所以我们需要先安装它们。 本教程中只会用到 python3 以及 golang 所以我们只安装这两个语言的解释器就足够了 python3 安装 grpc 与 protobuf 安装 grpc 库 pip3 install grpcio 安装 grpc 工具 以及 protobuf 解释器 pip3 install grpcio-tools googleapis-common-protos go 安装 grcp 与 protobuf 安装 grpc 库 go get -u -v google.golang.org/grpc 然后从 https://github.com/protocolbuffers/protobuf/releases 下载 与你操作系统对应的 protobuf 解释器这里选择的 linux64 进行下载 首先新建一个目录用来容纳下载安装包解压后的文件并进入目录 mkdir protobuf cd protobuf 下载 protobuf 解释器 wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip 解压缩下载的文件 unzip protoc*.zip 删除刚才下载好的压缩包 rm protoc*.zip 移动 protobuf 目录到 ~/.local mv ~/protobuf/ ~/.local/ 将 protobuf 的可执行文件添加进系统变量 echo PATH\\$HOME/.local/protobuf/bin:\$PATH\ ~/.profile 安装 protobuf go 语言的插件 go get -u github.com/golang/protobuf/protoc-gen-go 将插件添加进系统变量 echo PATH\$PATH:\$GOPATH/bin ~/.profile 然后使用 cd 命令回到用户根目录 cd 使用 grpc 创建本次使用的工程目录 创建工程目录并进入目录 mkdir $GOPATH/src/demo cd $GOPATH/src/demo 编写 proto 文件 proto 文件为 protobuf 的扩展名我们编写这个文件用于生成 python 与 go 都支持的代码。 这里我们再新建一个目录用来容纳 proto 文件以及 使用 protobuf 编译器转化过的代码 创建目录并进入目录 mkdir hello cd hello 接下来开始编写 proto 文件这里我们新建一个 名为 hello.proto 的文件并在里面写入以下内容 syntax proto3; //指定语法为 protobuf3 语法如果不写这句的话默认语法为 protobuf2
package hello; //指定包名这句在本次演示中只对 go 生效python 的 protobuf 解释器会忽略它service Greeter { // 定义grpc 远程调用的方法rpc SayHello (HelloRequest) returns (HelloReply) {} // 接受 HelloRequest 返回 HelloReplySayHello 需要自己在服务端实现
}message HelloRequest { //定义一个消息类型string name 1; //定义 name 字段为 string 类型 tag 为 1
}message HelloReply {string message 1;
} 完成后保存并退出编辑 生成对应语言的代码 编辑好 proto 文件后我们并不能直接使用它还需要将它转化成对应语言的代码才能使用 生成 go 语言的代码 protoc hello.proto --go_outpluginsgrpc:. 生成 python 的代码 python3 -m grpc_tools.protoc -I . --python_out. --grpc_python_out. hello.proto 然后我们回到 demo 工程目录开始真正的 代码编写 cd .. 编写服务端 服务端端这里我采用的 go 语言进行编写 创建一个名为 server.go 的文件并写入以下内容 package mainimport (contextgoogle.golang.org/grpcgoogle.golang.org/grpc/reflectionlogdemo/hellonet
)const (port :50051 // 监听端口
)type server struct{}func (s *server) SayHello(ctx context.Context, in *hello.HelloRequest) (*hello.HelloReply, error) { // 服务端实现 proto 中定义的方法return hello.HelloReply{Message: Hello in.Name}, nil //拼接客户端发送过来的消息并返回给客户端
}func main() {lis, err : net.Listen(tcp, port) // 启动监听if err ! nil {log.Fatalf(failed to listen: %v, err) }s : grpc.NewServer()hello.RegisterGreeterServer(s, server{})reflection.Register(s) // 在 grpc 上注册服务if err : s.Serve(lis); err ! nil { //启动服务并处理错误log.Fatalf(failed to server: %v, err) }
}编写 客户端 客户端我采用的 python3 进行编写 创建一个名为 client.py 的文件写入以下内容 #! /usr/bin/env python3
# -*- coding: utf-8 -*-import grpc # 导入 grpc 模块import sys
sys.path.append(hello) # 将 hello 目录临时添加进环境变量不然接下来的导入会失败import hello_pb2 #导入我们刚才从 helloWorld.proto 生成的 python 代码
import hello_pb2_grpcdef run():with grpc.insecure_channel(localhost:50051) as channel: # 创建连接到服务端的通道stub hello_pb2_grpc.GreeterStub(channel) #创建提供调用的存根response stub.SayHello(hello_pb2.HelloRequest(name niconiconi)) #调用 SayHello 方法 发送我们刚才在 proto 文件中定义的字段返回我们在 proto 中定义的返回值print(Greeter client received: response.message) #打印返回值if __name__ __main__:run() 运行 grpc 服务端与客户端 首先我们启动服务端 go run server.go 使用 CTRL z 将 正在运行的服务端挂起在后台然后使用 bg命令使挂起的 程序继续运行。 接下来运行我们编写的客户端 python3 client.py 不出意外的话你的屏幕上应该会打印 Greeter client received: Hello niconiconi 到这里 演示就全部结束了。 转载于:https://www.cnblogs.com/Paul-watermelon/p/11338019.html