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) }
相关推荐
darren0zdc 2020-10-16
ltstud 2020-07-24
Erick 2020-07-18
xmwang0 2020-06-14
极品小肥羊 2020-05-31
小小书童 2020-05-20
极品小肥羊 2020-04-23
小小书童 2020-04-10
君小黑 2020-03-04
naiwenw 2020-02-18
小小书童 2020-02-22
dabaoge 2020-02-16
小小书童 2019-12-23
dabaoge 2020-01-25
MAC2007 2020-01-17
duanlove技术路途 2019-12-28
ltstud 2020-01-10