grpc入门

rushui · 2020-05-18 21:13:53 · 817 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2020-05-18 21:13:53 的文章,其中的信息可能已经有所发展或是发生改变。

准备工作

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go
export PATH=$PATH:$GOPATH/bin

编辑pd/hello.proto

syntax = "proto3";

option objc_class_prefix = "HLW";

package hello;

// The greeting service definition.
service Greeter {
    // Sends a greeting
    rpc SayHello (HelloRequest) returns (HelloReply) {
    }
}

// The request message containing the user's name.
message HelloRequest {
    string name = 1;
}

// The response message containing the greetings
message HelloReply {
    string message = 1;
}

server.go

package main

import (
    "log"
    "net"

    pb "github.com/grpc-example/simple/pb"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
)

const (
    PORT = ":50001"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    log.Println("request: ", in.Name)
    return &pb.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()
    grpc.EnableTracing = true
    pb.RegisterGreeterServer(s, &server{})
    log.Println("rpc服务已经开启")
    s.Serve(lis)
}

cli.go

package main

import (
    "log"
    "os"

    pb "github.com/grpc-example/simple/pb"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
)

const (
    address = "localhost:50001"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure())

    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }

    defer conn.Close()

    c := pb.NewGreeterClient(conn)

    name := "lin"
    if len(os.Args) > 1 {
        name = os.Args[1]
    }

    r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})

    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }

    log.Println(r.Message)
}

编译.proto文件命令

protoc --go_out=plugins=grpc:. hello.proto

下载demo

git clone https://github.com/grpc-example/simple.git
cd simple

run server

go run server.go

run client

go run cli.go

项目地址

https://github.com/grpc-example/simple


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

817 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传