golang使用grpc

Posted sunshenggang

tags:

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

RPC概念

我的网络通信概念还停留在比较基础的地方, 直觉来说就是发送一个get/post请求, 设定一定的参数格式, 这样对方再解析你的数据, 基于此完成通讯.
而rpc则不使用这种显式的通讯方式, 通过proto与生成grpc文件, 里面提供方法, 供client与server通过方法来进行通讯. 简单来说, 就是如果你以前要告诉server你好, 需要发送一个完整网络请求, 但是现在你只需要调用一个hello方法就可以了

安装

go get google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go

目录结构

技术图片

DEMO

proto 文件

syntax = "proto3";
package "proto";

service Msg{
   rpc SendMsg(RequestMsg) returns(ReplyMsg){}
}

message RequestMsg{
    string message = 1;
}

message ReplyMsg{
    string message = 1;
}

编译文件
protoc -I ./ ./msg.proto --go_out=plugins=grpc:./
生成msg.pb.go文件

server文件

package main
import (
	"context"
	"fmt"
	pb "grpc_test/proto"
	"net"

	"google.golang.org/grpc"
)

const (
	Address = "127.0.0.1:8801"
)

type MsgServer struct{}

func (m *MsgServer)SendMsg(ctx content.Context, request *pb.RequestMsg)(*pb.ReplyMsg, error){
    fmt.Println("get client info , msg is:", request.Message)
	res := "test" + request.Message
	return &pb.MsgReply{Message: res}, nil
}

func main(){
    
    conn,err:=  net.Listen("tcp", Address)
    if err!=nil{
        fmt.Sprintln("tcp失败", err)
        return
    }
    defer conn.Close()
    
    service := MsgServer{}
    
    server := grpc.NewServer()
    pb.RegisterMsgServer(server, &service)
    
    if err:= server.Serve(conn);err!=nil{
        fmt.Spintln("启动失败",err)
        return
    }
    
    
}

client文件

package main

const (
    Address = "127.0.0.1:8801"
)

func main(){
    conn,err:=grpc.Dial(Address, grpc.WithInsecure())
    if err!=nil{
        fmt.Println(err)
    }
    defer conn.Close()
    client := pb.NewMsgCient(conn)
    result,err:= client.SendMsg(context.Background(), &pb.RequestMsg{Messgae:"test message"})
    
    if err:= nil{
        fmt.Println(err)
    }
    fmt.Println("接受到的数据:", result)
}





以上是关于golang使用grpc的主要内容,如果未能解决你的问题,请参考以下文章

Grpc 在golang中的使用

在 golang 中更新 grpc 的接收和发送消息大小

Golang gRPC 示例

gRPC最佳入门教程,Golang/Python/PHP多语言讲解

读golang的grpc源码

gRPC之GoLang入门HelloWord(排版整理)