第一节——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结构体需要实现的方法
    第一节——grpc初体验_第1张图片
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.Req{Message: "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.Req{Message: "I'm come from client"})
	fmt.Println(res.GetMessage())
}
  1. 首先启动server文件夹中的main.go文件,监听8888端口
  2. 再启动client文件夹中的main.go文件,向本地8888端口建立一个不安全连接,发送一个req结构体

你可能感兴趣的:(#,grpc学习,grpc)