安装配置grpc-golang

  • linux安装配置很简单
  • windows参考https://blog.csdn.net/tyler_xiang/article/details/78529358

编写协议文件

编写协议文件pi.proto

syntax = \"proto3\";

package pi;

// pi service
service PiCalculator {
    // pi method
    rpc Calc(PiRequest) returns (PiResponse) {}
}

// pi input
message PiRequest {
    int32 n = 1;
}

// pi output
message PiResponse {
    double value = 1;
}

生成代码

protoc -I.  --go_out=plugins=grpc:. pi.proto

实现服务接口

server端代码

package main

import (
	\"golang.org/x/net/context\"
	\"google.golang.org/grpc\"
	// 这里的路劲是上一步骤生成的代码的路径
	pi \"path/to/pi.pb.go\"
	\"log\"
	\"math\"
	\"net\"
)

const port = \":8080\"

type server struct{}

func (s *server) Calc(ctx context.Context, in *pi.PiRequest) (*pi.PiResponse, error) {
	var res float64 = 0.0
	for i := 0; i < int(in.N); i++ {
		res += 1.0 / float64(2*i+1.0) / float64(2*i+1)
	}
	return &pi.PiResponse{Value: math.Sqrt(8 * res)}, nil
}

func main() {
	lis, err := net.Listen(\"tcp\", port)
	if err != nil {
		log.Fatalf(\"failed to listen: %v\", err)
	}

	s := grpc.NewServer()
	pi.RegisterPiCalculatorServer(s, &server{})

	log.Fatal(s.Serve(lis))
}

client端代码

package main

import (
	\"fmt\"
	\"golang.org/x/net/context\"
	\"google.golang.org/grpc\"
	// 这里的路劲是上一步骤生成的代码的路径
	pi \"path/to/pi.pb.go\"
	\"log\"
)

const (
	address = \"localhost:8080\"
)

func main() {
	conn, err := grpc.Dial(address, grpc.WithInsecure())
	if err != nil {
		log.Fatal(\"can\'t connect to address: \", err)
	}
	defer conn.Close()

	client := pi.NewPiCalculatorClient(conn)

	for i := 0; i < 100000; i++ {
		calc(client, i)
	}
}

func calc(client pi.PiCalculatorClient, i int) {
	r, err := client.Calc(context.Background(), &pi.PiRequest{N: 100})
	if err != nil {
		log.Println(i, err)
	}
	fmt.Println(i, r.Value)
}

补充

上一篇博客中的python-grpc和这一片的golang-grpc可以互相调用

收藏 打印