第一节——grpc初体验

Posted 想学习安全的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一节——grpc初体验相关的知识,希望对你有一定的参考价值。

第一章——创建一个客服端与服务端启功grpc

1.1、创建grpc的proto文件

  1. 在工程目录下创建proto文件夹,在文件夹里面创建hello_grpc.proto文件
  2. 在hello_grpc.proto文件中,第一行使用syntax = "proto3";来声明使用proto3
  3. 在hello_grpc.proto文件中定义两个消息,一个是Req,另一个是Res。这两个消息里都只定义一个字段string message=1;
  4. 在hello_grpc.proto文件中定义一个服务HelloGRPC,使用关键字rpc定义一个方法SayHi,将Req作为入参,将Res作为出参
syntax = "proto3";

message Req
  string message=1;


message Res
  string message=1;


service HelloGRPC
  rpc SayHi(Req) returns (Res);

1.2、为go语言创建pb文件

  1. 在工程目录下使用命令:go mod init grpcStudy创建mod管理器
  2. 在工程目录下创建pb文件夹
  3. 使用命令go get google.golang.org/grpc获取grpc包
  4. 在hello_grpc.proto文件中第一行下面使用option go_package="../pb;pb";声明pb文件存放的路径与pb文件的包名。
    • 使用格式:option go_package=“path;name”
    • path表示go的pb文件存放路径
    • name表示pb文件所属包名
  5. 在工程目录下使用命令:protoc --proto_path=proto --go_out=pb --go-grpc_out=pb proto/*.proto生成pb文件

1.3 、创建grpc的服务端

  1. 在工程目录下创建server文件夹,在server文件夹下创建main.go文件
  2. 定义一个结构体server里面使用生成的pb里的pb.UnimplementedHelloGRPCServer结构体
  3. 查看UnimplementedHelloGRPCServer结构体需要实现的方法
type server struct 
	pb.UnimplementedHelloGRPCServer


func (s *server) SayHi(ctx context.Context, req *pb.Req) (res *pb.Res, err error) 
	fmt.Printf(req.GetMessage())
	return &pb.Res
		Message: "I'm request from server",
	,nil

  1. 在mian方法里编写监听以及使用服务的代码
func main() 
	listen,_:=net.Listen("tcp",":8888")
	s:=grpc.NewServer()
	pb.RegisterHelloGRPCServer(s,&server)
	s.Serve(listen)

1.4 、创建grpc的客户端、

  1. 在工程目录下创建client文件夹,在client文件夹下创建main.go文件
  2. 使用grpc.Dial创建一个链接,该链接使用本地8888端口,并标注为不安全连接:conn,_:=grpc.Dial("localhost:8888",grpc.WithInsecure())
  3. 使用defer让con使用完毕后关闭
  4. 使用NewHelloGRPCClient方法获取一个client,之后调用client里的SayHi方法,传入一个context和req结构提,SayHi方法返回一个Res结构体,使用res变量接收
  5. 将res里的mseeage打印出来
func main() 
	conn, _ := grpc.Dial("localhost:8888", grpc.WithInsecure())
	defer conn.Close()
	client:=pb.NewHelloGRPCClient(conn)
	res,_:=client.SayHi(context.Background(),&pb.ReqMessage: "I'm come from client")
	fmt.Printf(res.GetMessage())

1.5 、使用grpc进行通信

  1. server文件夹中main.go文件
package main

import (
	"context"
	"fmt"
	"grpcStudy/pb"
	"net"

	"google.golang.org/grpc"
)

type server struct 
	pb.UnimplementedHelloGRPCServer


func (s *server) SayHi(ctx context.Context, req *pb.Req) (res *pb.Res, err error) 
	fmt.Println(req.GetMessage())
	return &pb.Res
		Message: "I'm request from server",
	, nil


func main() 
	listen, _ := net.Listen("tcp", ":8888")
	s := grpc.NewServer()
	pb.RegisterHelloGRPCServer(s, &server)
	s.Serve(listen)

  1. client文件夹中main.go文件
package main

import (
	"context"
	"fmt"
	"grpcStudy/pb"

	"google.golang.org/grpc"
)

func main() 
	conn, _ := grpc.Dial("localhost:8888", grpc.WithInsecure())
	defer conn.Close()
	client := pb.NewHelloGRPCClient(conn)
	res, _ := client.SayHi(context.Background(), &pb.ReqMessage: "I'm come from client")
	fmt.Println(res.GetMessage())

  1. 首先启动server文件夹中的main.go文件,监听8888端口
  2. 再启动client文件夹中的main.go文件,向本地8888端口建立一个不安全连接,发送一个req结构体

以上是关于第一节——grpc初体验的主要内容,如果未能解决你的问题,请参考以下文章

gRPC初体验

[Go][gRPC]mock初体验

.NET gRPC核心功能初体验

Grpc-Gateway 初体验

干货.NET Core微服务之Grpc初体验

Python初体验