gRPC for Golang 实战

发布于 2018-04-21 18:12:24 阅读 347

首先将nodejs的server服务启动(使用的是上次nodejs的server服务)

node server/nodeservice_server.js

服务启动没问题后,新建一个golang的文件main.go

代码如下

package main

import (
    "fmt"
    "log"
    "time"

    pb "github.com/zmisgod/test"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
)

const (
//node server端绑定的50051端口
    address = "0.0.0.0:50051"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("do not connect: %v", err)
    }
    defer conn.Close()

    c := pb.NewNodeServiceClient(conn)

    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    defer cancel()

    r, err := c.Png2Svg(ctx, &pb.Png2SvgRequest{ImgUrl: "https://d30y9cdsu7xlg0.cloudfront.net/png/120046-200.png", Width: 300, Height: 300})
    if err != nil {
        log.Fatalf("connect err : %v", err)
    }

    if r.Code == 1 {
        fmt.Println(r.SvgSourceCode)
    } else {
        fmt.Println(r.Msg)
    }
}

上面的要点是

r, err := c.Png2Svg(ctx, &pb.Png2SvgRequest{
ImgUrl: "https://d30y9cdsu7xlg0.cloudfront.net/png/120046-200.png",
 Width: 300, 
Height: 300
})

Png2Svg是我们在nodeservice .proto文件定义的一个rpc服务。传递的就是这个服务定义的request

message Png2SvgRequest {
    string img_url = 1;//图片url,例如https://d30y9cdsu7xlg0.cloudfront.net/png/120046-200.png
    int32 width = 2;//导出的svg宽度
    int32 height = 3;//导出的svg高度
}

这个golang版本的grpc的client端就完成了。