蜂蜜网站建设,团购网站开发需要多久,建设部网站合并,工图网系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客户端五、测试六、示例代码 一、前言
多服务#xff0c;即一个rpc提供多个服务给外界调用…系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客户端五、测试六、示例代码 一、前言
多服务即一个rpc提供多个服务给外界调用。好比唤醒服务可以有语音唤醒、人脸唤醒、触摸唤醒、人体唤醒。以此为基础做一个示例。
二、定义proto文件
这里定义2个服务一个语音唤醒服务人脸唤醒服务。语音唤醒服务又包含各种各样的方法比如狗叫、坤叫狗会汪汪汪叫猫会喵喵喵叫坤会这里以狗叫为例。人脸唤醒又包含各种各样的方法比如一耳光一巴掌毕竟没几个人挨一巴掌还没醒的这里以一巴掌为例。
新建wake.proto文件示例如下
// 指定proto版本
syntax proto3;package wake_grpc; // 指定默认包名// 指定golang包名
option go_package /wake_proto;//语音唤醒服务
service VoiceWakeService {//狗叫rpc DogBark(Request)returns(Response){}
}//人脸唤醒服务
service FaceWakeService {//一巴掌rpc ASlap(Request)returns(Response){}
}//请求参数
message Request{string name 1;
}
//响应参数
message Response{string sound 1;
}在go_grpc_study/example_2/grpc_proto目录下新建Terminal执行生成文件命令如下
protoc --go_out. --go-grpc_out. ./wake.proto目录结构变更后为
三、编写server服务端
新建server目录新建main.go文件 目录结构如下 编写server/main.go文件
package mainimport (contextfmtwake_grpc2 go_grpc_study/example_2/grpc_proto/wake_protogoogle.golang.org/grpcgoogle.golang.org/grpc/grpclognet
)// 新版本 gRPC 要求必须嵌入 UnimplementedGreeterServer 结构体
type VoiceWakeServer struct {wake_grpc2.UnimplementedVoiceWakeServiceServer
}
type FaceWakeServer struct {wake_grpc2.UnimplementedFaceWakeServiceServer
}func (VoiceWakeServer) DogBark(ctx context.Context, request *wake_grpc2.Request) (pd *wake_grpc2.Response, err error) {fmt.Println(语音唤醒入参, request.Name)pd new(wake_grpc2.Response)pd.Sound 汪汪汪return
}func (FaceWakeServer) ASlap(ctx context.Context, request *wake_grpc2.Request) (pd *wake_grpc2.Response, err error) {fmt.Println(人脸唤醒入参, request.Name)pd new(wake_grpc2.Response)pd.Sound 塞班return
}func main() {// 监听端口listen, err : net.Listen(tcp, :8080)if err ! nil {grpclog.Fatalf(Failed to listen: %v, err)}// 创建一个gRPC服务器实例。s : grpc.NewServer()// 将server结构体注册为gRPC服务。wake_grpc2.RegisterVoiceWakeServiceServer(s, VoiceWakeServer{})wake_grpc2.RegisterFaceWakeServiceServer(s, FaceWakeServer{})fmt.Println(grpc server running :8080)// 开始处理客户端请求。err s.Serve(listen)
}具体步骤如下:
1定义2个结构体结构体名称无所谓必须包含pb.UnimplementedGreeterServer 对象2实现 .proto文件中定义的API即DogBark狗叫方法ASlap一巴掌方法3将服务描述及其具体实现注册到 gRPC 中
四、编写Client客户端
新建client目录新建main.go文件 目录结构如下 编写clinet/main.go文件
package mainimport (contextfmtwake_grpc2 go_grpc_study/example_2/grpc_proto/wake_protogoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurelog
)func main() {addr : :8080// 使用 grpc.Dial 创建一个到指定地址的 gRPC 连接。// 此处使用不安全的证书来实现 SSL/TLS 连接conn, err : grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {log.Fatalf(fmt.Sprintf(grpc connect addr [%s] 连接失败 %s, addr, err))}defer conn.Close()voiceClient : wake_grpc2.NewVoiceWakeServiceClient(conn)res, err : voiceClient.DogBark(context.Background(), wake_grpc2.Request{Name: 张三,})fmt.Println(res, err)faceClient : wake_grpc2.NewFaceWakeServiceClient(conn)res, err faceClient.ASlap(context.Background(), wake_grpc2.Request{Name: 李四,})fmt.Println(res, err)
}具体步骤如下
1首先使用 grpc.Dial() 与 gRPC 服务器建立连接2使用 wake_grpc2.NewVoiceWakeServiceClient(conn)、wake_grpc2.NewFaceWakeServiceClient(conn)初始化客户端3通过客户端调用ServiceAPI方法voiceClient.DogBark、faceClient.ASlap
五、测试
在server目录下启动服务端
go run main.go在clinet目录下启动客户端
go run main.go服务端运行结果
客户端运行结果
六、示例代码
go_grpc_studygrpc学习golang版 完成ヾ(◍°∇°◍)