#1.环境准备第一步:安装protoc去protobuf,下载最新版的protoc,我下载的是win64第二步:安装protoc-gen-go进入protobuf-go,同样下载最新版的protoc,同样下载的是win64。将下载的protoc.exe和protoc-gen-go放在%GOPATH%\bin\目录下。或者更简单的方法,执行下面命令安装goinstallgoogle.golang.org/grpc/cmd/protoc-gen-go-grpc第三步:下载grpc#installgrpcgoget-ugoogle.golang.org/grpc#gRPC运行时界面编解码器支持库goget-ugithub.com/golang/protobuf/proto #2.项目目录结构在$GOPATH/src下新建iswbm.com目录和三个子目录(client、server、proto),在进入该目录在终端执行以下命令创建go.modmkdir$GOPATH/src/iswbm.com/{client,server,proto}cdmkdir$GOPATH/src/iswbm.com/#设置环境变量确保GO111MODULE开启goenv-wGO111MODULE=auto#Initializeprojectgomodinit#3.编写proto文件Writeproto/simple.protosyntax="proto3";packageproto;optiongo_package="/proto";//定义发送请求信息messageSimpleRequest{//参数类型参数名标识号stringdata=1;}//定义响应信息messageSimpleResponse{int32code=1;stringvalue=2;}//定义我们的服务(可以定义多个服务,每个服务可以定义多个接口)serviceSimple{rpcGetSimpleInfo(SimpleRequest)returns(SimpleResponse){};在iswbm.com目录下,执行如下命令protoc--go_out=../proto/simple.protoprotoc--go-grpc_out=../proto/simple.proto完成后,会在当前目录下一个simple目录下生成目录,里面有simple.pb.go和simple_grpc.pb.go#4.写server.gopackagemainimport("context"pb"iswbm.com/proto""google.golang.org/grpc""log""net")const(Addressstring=":8000"Networkstring="tcp")//定义我们的服务typeSimpleServicestruct{pb.UnmplementedSimpleServer}//实现GetSimpleInfo方法func(s*SimpleService)GetSimpleInfo(ctxcontext.Context,req*pb.SimpleRequest)(*pb.SimpleResponse,error){data:=req.Datalog.Println("getfromclient:",data)resp:=&pb.SimpleResponse{Code:8888,Value:"grpc",}returnresp,nil}funcmain(){//1.监听端口监听,err:=net.Listen(Network,Address)iferr!=nil{log.Fatalf("net.listenerr:%v",err)}log.Println(Address,"netlistening...")//2。实例化gRPC服务器grpcServer:=grpc.NewServer()//3。注册我们实现的服务SimpleServicepb.RegisterSimpleServer(grpcServer,&SimpleService{})//4.启动gRPC服务器err=grpcServer.Serve(listener)iferr!=nil{log.Fatalf("grpcservererr:%v",err)}}完成后首先安装依赖包goinstall执行如下命令运行服务器>gorunserver/server.go2021/07/2818:31:42:8000netlistening...#5.写入client.gopackagemainimport("context""google.golang.org/grpc""log"pb"iswbm.com/proto")const(Addressstring=":8000")funcmain(){//1。gRPC服务器上创建的连接conn,err:=grpc.Dial(Address,grpc.WithInsecure())iferr!=nil{log.Fatalf("dialconnerr:%v",err)}deferconn.Close()//2.创建grpc客户端client:=pb.NewSimpleClient(conn)//3.调用服务端提供的服务req:=pb.SimpleRequest{Data:"Hello,Server",}resp,err:=client。GetSimpleInfo(context.Background(),&req)iferr!=nil{log.Fatalf("resperr:%v",err)}log.Printf("getfromserver,code:%v,value:%v",resp.Code,resp.Value)}执行以下命令运行,立即收到服务器返回的消息>gorunclient/client.go2021/07/2818:54:35getfromserver,code:8888,value:grpc同时,服务器也会打印客户端的消息>gorunserver/server.go2021/07/2818:51:59:8000netlistening...2021/07/2818:54:35getfromclient:你好,服务器本文转载自微信公众号《围棋编程时间》,可通过以下二维码关注和转载本文,请联系围棋编程时间公众号。
