美文网首页
grpc笔记

grpc笔记

作者: guonaihong | 来源:发表于2019-05-31 14:17 被阅读0次

google出品的grpc就不需要更多的词汇夸了,毕竟是开发人员的爸爸出的

安装

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc 
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net 
git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text 
go get -u github.com/golang/protobuf/{proto,protoc-gen-go} 
git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto 

protofile

  • 注意函数入参必须是一个message
syntax = "proto3";

package mark;

service Mark {
    rpc GetResult(Input) returns(Result) {}
}

message Input {
    string src = 4;
    string trg = 5;
    string inputs = 6;
    string kwargs = 7;
}

message Result {
    string result = 1;
    string errmsg = 2;
    int32  errcode = 3;
}

生成代码

protoc --go_out=plugins=grpc:. src/proto/mark/mark.proto

grpc server

package main

import (
    "flag"
    "fmt"
    "github.com/guonaihong/log"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
    "net"
    "os"
    "proto/mark"
)

type egrpc struct{}

const pairNamePrefix = "mark-grpc"

func (e *egrpc) GetResult(ctx context.Context, input *mark.Input) (*mark.Result, error) {
    fmt.Printf("get result :::%#v\n", input)
    return &mark.Result{Result: "hello "}, nil
}

func main() {
    sa := flag.String("sa", ":1905", "engine grpc server")
    level := flag.String("level", "error", "(opt) the default output log level")

    flag.Parse()

    l := log.New(*level, pairNamePrefix, os.Stdout)

    listen, err := net.Listen("tcp", *sa)
    if err != nil {
        l.Errorf("mark engine server fail\n")
        return
    }

    s := grpc.NewServer()

    mark.RegisterMarkServer(s, &egrpc{})

    reflection.Register(s)

    if err := s.Serve(listen); err != nil {
        l.Errorf("failed to server: %v\n", err)
    }
}

grpc client

package main

import (
    "fmt"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
    "proto/mark"
)

func main() {
    conn, err := grpc.Dial("127.0.0.1:1905", grpc.WithInsecure())
    if err != nil {
        fmt.Printf("%s\n", err)
        return
    }

    defer conn.Close()

    c := mark.NewMarkClient(conn)

    r, err := c.GetResult(context.Background(), &mark.Input{
        Src:    "en",
        Trg:    "zh",
        Inputs: "hello world",
        Kwargs: "####",
    })

    fmt.Printf("r = %v, err = %v\n", r, err)
}

相关文章

  • gRPC 学习笔记

     gRPC 学习笔记,记录gprc一些基本概念.  gRPC正如其他 RPC 系统,gRPC 基于如下思想:定义一...

  • go gRPC基础

    sasuke.cn gRPC文档学习笔记 gRPC Basics - Go 学习目标: 定义服务 编译生成serv...

  • gRPC学习笔记(一)——入门介绍

    通过三篇笔记简单介绍下 gRPC,后续进行代码实践。 gRPC 介绍 gRPC 是一个高性能、跨平台、开源和通用的...

  • go语言快速使用gRPC

    sasuke.cngRPC官网文档学习笔记 快速开始 先决条件 gRPC需要1.6+版本的go。 安装gRPC 安...

  • grpc笔记

    google出品的grpc就不需要更多的词汇夸了,毕竟是开发人员的爸爸出的 安装 protofile 注意函数入参...

  • grpc-源码-网络模型

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

  • gRPC 4种rpc定义方法与3种stub介绍

    gRPC 有关gRPC官方介绍(https://www.grpc.io/docs/what-is-grpc/int...

  • gRPC安装与编译

    1.安装gRPC grpc与protobuf版本对照表:https://github.com/grpc/grpc/...

  • grpc 2022-11-28

    grpc[https://grpc.io/docs/what-is-grpc/introduction/] In ...

  • gRPC 学习笔记

    gRPC 主要使用同步请求-响应模型来交互,但是在初次连接建立后,可以实现全异步或者流模式; SOAP:Simpl...

网友评论

      本文标题:grpc笔记

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