美文网首页
golang使用gRPC创建双向流模式

golang使用gRPC创建双向流模式

作者: 杜子龙 | 来源:发表于2019-08-13 08:36 被阅读0次

proto文件如下:

syntax = "proto3";

package friday;

// 请求用户信息
message UserInfoRequest {
    int64 uid = 1; // 用户ID
}

// 请求用户信息的结果
message UserInfoResponse {
    string name     = 1; // 用户姓名
    uint32 age      = 2; // 用户年龄
    uint32 sex      = 3; // 用户性别
    uint32 count    = 4; // 账户余额
}

service Data {
    //简单Rpc
    // 获取用户数据
    rpc GetUserInfo(UserInfoRequest) returns (UserInfoResponse){}

    //  修改用户 双向流模式
    rpc ChangeUserInfo(stream UserInfoResponse) returns (stream UserInfoResponse){}

}

服务端实现:

/*服务端的方法*/
package response

import (
    "golang.org/x/net/context"
    pb "rpcTest/rpcbuild/rpcbuild/friday"
    "fmt"
    "io"
)

type Server struct{
    routeNotes    []*pb.UserInfoResponse
}

//简单模式
func (this *Server)GetUserInfo(ctx context.Context, in *pb.UserInfoRequest)(*pb.UserInfoResponse,error){
    uid := in.GetUid()
    fmt.Println("The uid is ",uid)
    return &pb.UserInfoResponse{
        Name : "Jim",
        Age  : 18,
        Sex : 0,
        Count:1000,
    },nil
}

//双向流模式
func (this *Server) ChangeUserInfo(stream pb.Data_ChangeUserInfoServer)(error){
    for {
        in, err := stream.Recv()
        if err == io.EOF {
            fmt.Println("read done")
            return nil
        }
        if err != nil {
            fmt.Println("ERR",err)
            return err
        }
        fmt.Println("userinfo ",in)
        for _, note := range this.routeNotes{
            if err := stream.Send(note); err != nil {
                return err
            }
        }
    }
}

客户端实现:

//TODO

参考:

  1. https://blog.csdn.net/Paddy90/article/details/71123196
  2. https://www.cnblogs.com/mind-water/articles/10399995.html
  3. http://doc.oschina.net/grpc?t=60133

相关文章

  • golang使用gRPC创建双向流模式

    proto文件如下: 服务端实现: 客户端实现: 参考: https://blog.csdn.net/Paddy9...

  • 3 grpc流

    1 grpc的四种通信模式 四种通信模式 一元模式 客户端流模式 服务的流模式 双向流模式 2 一元模式 前面已经...

  • 对grpc双向流的理解

    [toc] 对grpc双向流的理解 一. 双向流的实现 1.1 proto 1.2 服务端 自动生成代码部分 深层...

  • Windows下grpc安装

    Golang 官方说明使用 go get google.golang.org/grpc 进行安装,但是由于代码已经...

  • 使用TypeScript与Golang进行gRPC通信

    title: 使用TypeScript与Golang进行gRPC通信tags: gRPCcategories: 后...

  • grpc-源码-网络模型

    golang 的grpc库是 https://github.com/grpc/grpc-go grpc serve...

  • golang安装gRpc

    golang安装gRpc安装官方安装命令: go get google.golang.org/grpc 是安装不起...

  • grpc结合python使用

    首先需要提到的是我们使用grpc的传输协议是http/2.0版本他是一种双向流控制协议其中的核心包含stream、...

  • grpc 简单使用

    参考:golang grpc 快速开始[https://grpc.io/docs/languages/go/qu...

  • golang安装使用grpc

    1. 安装grpc 官网的安装命令: 貌似用不了,连不上服务器,即便我挂上vpn也没有用,没办法只有迂回安装了, ...

网友评论

      本文标题:golang使用gRPC创建双向流模式

      本文链接:https://www.haomeiwen.com/subject/ioimjctx.html