简单领略——GRPC

GRPC

相关链接:

  • ———>grpc官网<———

  • go grpc 快速开始

创建proto文件

使用工具Goland

简单领略——GRPC_第1张图片

pb/hello_grpc.proto ————proto文件
//声明版本
syntax = "proto3";

// 生成的go文件的包名
option go_package="./;gorpc;";
// proto 的包名
package hello_grpc;

// 请求信息结构体
message Req {
  //字段
  string message = 1;
}
// 响应信息结构体
message  Res {
	//字段
  string  message = 1;
}
// 创建一个服务
service HelloGRPC {
  rpc SayHi(Req) returns(Res);
}
pb/build.bat ————将proto文件生成go代码的命令
@echo off
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello_grpc.proto

编译

下载依赖工具
 go mod tidy
 go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

protoc工具下载

  • 在Assets里面找到 protoc-21.1-win64.zip,工具一直在更新,可能你们看到的版本和我的不一样,不过都可以用。对应自己的电脑版本去下载相应的文件。
  • 将工具解压之后放在 gopath下面的bin文件夹里面
  • 注意:需要将gopath/bin这个路径添加到环境变量当中

简单领略——GRPC_第2张图片

简单领略——GRPC_第3张图片

开始编译相关文件

打开终端进入到 hello_gprc.proto文件所在的文件夹,执行 build.bat.这个时候会生成hello_gprc.pb.gohello_gprc_grpc.pb.go两个go文件

简单领略——GRPC_第4张图片

创建服务端

server/mian.go ———服务端代码
package main

import (
	servers "grpc"
	gorpc "grpc/pb"
	"google.golang.org/grpc"
	"log"
	"net"
)

func main() {
	listen, err := net.Listen("tcp", ":8080")
	if err != nil {
		log.Fatal(err)
	}
	server := grpc.NewServer()
	gorpc.RegisterHelloGRPCServer(server, &servers.Server{})
	err = server.Serve(listen)
	if err != nil {
		log.Fatal(err)
	}
}
server.go ————服务结构体
package server

import (
	gorpc "grpc/pb"
	"context"
	"fmt"
)

type Server struct {
	gorpc.UnimplementedHelloGRPCServer
}

func (receiver *Server) SayHi(ctx context.Context, req *gorpc.Req) (res *gorpc.Res, err error) {
	fmt.Println(req.GetMessage())
	return &gorpc.Res{Message: "my name is server"}, nil
}

创建客户端

client/main.go ———客户端代码
package main

import (
	gorpc "grpc/pb"
	"context"
	"google.golang.org/grpc"
	"log"
)

func main() {
	conn, err := grpc.Dial("localhost:8080", grpc.WithInsecure())

	defer conn.Close()
	if err != nil {
		log.Fatal(err)
	}
	client := gorpc.NewHelloGRPCClient(conn)
	req, err := client.SayHi(context.Background(), &gorpc.Req{Message: "my name is client"})
	if err != nil {
		log.Fatal(err)
	}
	println(req.GetMessage())
}

你可能感兴趣的:(go,golang,rpc)