grpc安装及其及其第一个程序调通

一:安装grpc

 在go使用了module  只需要在 go.mod文件中添加一下文件,进入次目录执行 go build 自动安装了(需要更改go的代理,我使用的是七牛云的代理,能直接下载)

require (
	google.golang.org/grpc v1.34.0
	google.golang.org/protobuf v1.25.0
)

二:准备编译protoful需要的工具

1、安装protoc 根据开发环境和需求下载:https://github.com/protocolbuffers/protobuf/releases

2、编译 protoc-gen-go 源文件下载地址:https://github.com/golang/protobuf/tree/master/protoc-gen-go 是go语言编写的可以自己直接下载,自己编译成二进制文件

3、编译 protoc-gen-go-grpc 下载地址:https://github.com/grpc/grpc-go/tree/master/cmd/protoc-gen-go-grpc  是go语言编写的可以自己直接下载,自己编译成二进制文件

4、以上三部的安装一定要保证在命令行下,能找到这个三个命令(设置一下全局变量,或者放到你的GOPATH下面的bin文件下,然后把此文件夹设置成环境变量文件加)

三、编写proto文件

语法教程:proto3语法教程

实例:编写文件  ticketCheck.proto

syntax = "proto3"; //使用的是版本

option go_package = "ticketCheck"; 是这生成*._grpc.pb.go,*.pb.go文件的包名

package proto;

message TicketRequest {  //请求结构体
     int32  playtype = 1;
     int32  lottype = 2;
     string lotnum = 3;
     int32  multiple = 4;
     int32  betnum = 5;
     int32  money = 6;
}


message TikcetResponse { //返回结构体
   bool    checkflag = 1;
   string  errors = 2;
}


service  CheckService { //方法
  rpc Verification (TicketRequest) returns (TikcetResponse){}; 
} 

生成*._grpc.pb.go,*.pb.go文件 

进入你要编写的 ticketCheck.proto 所在的目录 然后在命令行下执行:

protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ticketCheck.proto

四:编写服务端

 

package main

import (
	pb "codestudy/proto/ticketCheck" //生成proto文件的地址
	"context"
	"google.golang.org/grpc"
	"log"
	"net"
)

type TicketCheck struct {
	pb.UnimplementedCheckServiceServer
}

func (t *TicketCheck) Verification(ctx context.Context, ticket *pb.TicketRequest) (*pb.TikcetResponse, error) {
	return &pb.TikcetResponse{Checkflag: true, Errors: "验证成功"}, nil
}

func main() {
	lis, err := net.Listen("tcp", ":7788")
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}
	s := grpc.NewServer()
	pb.RegisterCheckServiceServer(s, &TicketCheck{})
	if err := s.Serve(lis); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
}

五:编写客户端

package main

import (
	"context"
	"log"
	"time"

	pb "codestudy/proto/ticketCheck"
	"google.golang.org/grpc"
)

const (
	address = "localhost:7788"
)

func main() {
	// Set up a connection to the server.
	conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()

	c := pb.NewCheckServiceClient(conn)

	// Contact the server and print out its response.
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	defer cancel()
	var ticket *pb.TicketRequest = &pb.TicketRequest{
		Playtype: 1,
		Lottype:  1,
		Lotnum:   "1,2,3,4,5,6,7,8,9,10",
		Multiple: 1,
		Betnum:   1,
		Money:    2,
	}
	r, err := c.Verification(ctx, ticket)
	if err != nil {
		log.Fatalf("could not greet: %v", err)
	}
	log.Printf("Greeting: %s", r.GetErrors())
}

六:启动服务端,然后在执行客户端就ok了

注:一定要先学习proto3的语法,会根据需求编写proto3文件。然后在编写服务端和客户端。在学习服务注册,服务发现,负载均衡(consul,etcd) 

学无止境,动手最重要。

上一篇:tensorRT执行流程


下一篇:PB+MS SQL+触发器关闭返回值