go的grpc的三种流模式通信
1、grpc通信模式简介
grpc的数据传输可以分为4种模式:
简单模式 (一元调用)
服务端流模式 (服务端返回实时股票数据给前台)
客户端流模式 (物联网硬件设备向后端发送数据)
双向流模式 (聊天场景)
2、stream.proto文件
syntax = "proto3";
option go_package = "./;proto";
// grpc的数据传输可以分为4种模式:
// 简单模式(一元调用)、服务端流模式(服务端返回实时股票数据给前台)、客户端流模式(物联网硬件设备向后端发送数据)、双向流模式(聊天场景)
service Greeter {
rpc GetStream(StreamReqData) returns (stream StreamResData);// 服务端流模式
rpc PutStream(stream StreamReqData) returns (StreamResData);// 客户端流模式
rpc AllStream(stream StreamReqData) returns (stream StreamResData);// 双向流模式
}
// 请求数据结构体
message StreamReqData{
string data = 1;
}
// 响应数据结构体
message StreamResData{
string data = 1;
}
生成客户端代理stub程序、服务端代理stub程序、接口相关代码的命令:
protoc --go_out=. --go-grpc_out=. stream.proto
3、服务端代码 server.go
package main
import (
"Go_Bible/stream_grpc_test/proto"
"fmt"
"google.golang.org/grpc"
"net"
"sync"
"time"
)
// 端口
const PORT = ":8088"
// 自定义服务结构体
type MyServer struct {
proto.UnimplementedGreeterServer
}
// 实现服务端流模式方法
func (s *MyServer) GetStream(req *proto.StreamReqData, srvStr proto.Greeter_GetStreamServer) error {
i := 0
for {
i++
// 向客户端发送响应结构体
_ = srvStr.SendMsg(&proto.StreamResData{
Data:fmt.Sprintf("%v", time.Now().Unix()),
})
time.Sleep(time.Second)
// 每隔一秒发送1次,总共发送10次
if i >= 10 {
break
}
}
return nil
}
// 实现客户端流模式方法
func