grpcインストールと使用を行きます

インストール1.

コンパイラprotocをインストール1.

それは、私たちは、さまざまな言語に翻訳されたコード.proto文書を書くことができます

ダウンロード

wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protoc-3.11.4-linux-x86_64.zip

減圧
unzip protoc-3.11.4-linux-x86_64.zip

コピーは
なりますprotoc-3.11.4-linux-x86_64/bin下のprotocファイルがコピーされているGOPATH次の
だろうprotoc-3.11.4-linux-x86_64/includegoogleにコピーされたフォルダ/usr/local/includeのディレクトリ

2. 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 

エラー上記のインストールが最後の時間であってもよいし、cannot find package "golang.org/x/sys/unix" in any of:golang.org(次のエラーがうまく、このステップをスキップしていない場合)、壁の上に必要な、それはこの方法に従うことによって解決することができます

cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/sys.git

残りをインストールします。

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
cd $GOPATH/src/
go install google.golang.org/grpc

インストールが成功しなかった何か、そして出力


2.書き込みプロトファイル、必要な言語コードにコンパイル(golang)

1. hello.protoを作成することは
、実際にサービスの定義です、そしてその背後にインターフェイスを実装する必要があります

syntax = "proto3"

package hello;

service HelloService {
	rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
	string name = 1;
	int age = 2;
}

message HelloReply {
	string  time = 1;
}

2.コンパイル

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

現在のフォルダのファイルに生成されますhello.pb.go


3.ツリー

grpctest/
├── client
│   ├── go.mod
│   ├── go.sum
│   ├── main.go
│   └── proto
│       └── hello
│           ├── hello.pb.go
│           └── hello.proto
└── server
    ├── go.mod
    ├── go.sum
    ├── handler
    │   └── handler.go
    ├── proto
    │   └── hello
    │       ├── hello.pb.go
    │       └── hello.proto
    └── service.go

定義されたサービスを実装し、開始4

1.server/handler/handler.goファイル構造の定義、およびだけで実現するSayHello方法を

package handler

import (
	"context"
	"fmt"
	hellopb "server/proto/hello"
	"time"
)

type hellosrv struct {}

func NewHelloSrv() hellopb.HelloServiceServer {
	return &hellosrv{}
}

func (*hellosrv)SayHello(ctx context.Context, in *hellopb.HelloRequest) (*hellopb.HelloReply, error) {
	fmt.Println("姓名:", in.Name, "年龄:", in.Age)
	var time string = time.Now().String()
	return &hellopb.HelloReply{Time: time}, nil
}

2.server/service.goサービスファイルを開始する準備

package main

import (
	"fmt"
	"net"
	hellopb "server/proto/hello"
	"server/handler"
	"google.golang.org/grpc"
)

const (
	PORT = ":7778"
)

func main() {
	lis, err := net.Listen("tcp", PORT)
	if err != nil {
		fmt.Println(err)
	}

	grpcService := grpc.NewServer()
	
	 //注册服务
	hellopb.RegisterHelloServiceServer(grpcService, handler.NewHelloSrv())
	if err := grpcService.Serve(lis); err != nil {
		fmt.Println(err)
	}
}

3.サービス開始
go run service.go


クライアントは、サービスを呼び出します

1.上記で生成されたコンパイルする必要があるhello.pb.goファイルのコピーが続く、最初に来たclient/main.goサービスの呼び出し

package main

import (
	hellopb "client/proto/hello"
	"google.golang.org/grpc"
	"context"
	"fmt"
	"time"
)

const (
	ADDRESS = "127.0.0.1:7778"
)

func main() {
	conn, err := grpc.Dial(ADDRESS, grpc.WithInsecure())
	if err != nil {
		fmt.Println(err)
	}
	defer conn.Close()

	client := hellopb.NewFirstServiceClient(conn)
	
	resp, err := client.SayHello(context.Background(), &hellopb.HelloRequest{Name: "lubenwei", Age: "21"})
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(resp.Time)
}

2.テスト
go run main.go

クライアントの出力:

2020-03-31 16:46:04.018755957 +0800 CST m=+5.300707152

server出力:

姓名: lubenwei 年龄: 21
公開された48元の記事 ウォン称賛56 ビュー20000 +

おすすめ

転載: blog.csdn.net/zhetmdoubeizhanyong/article/details/105223689