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

目錄結構

title

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)
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM