第一步:安装 protoc

为岚皋等地区用户提供了全套网页设计制作服务,及岚皋网站建设行业解决方案。主营业务为成都做网站、网站设计、岚皋网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
前往 protobuf,下载最新版的 protoc ,我下载的是 win 64
第二步:安装 protoc-gen-go
前往 protobuf-go ,同样下载最新版的 protoc,同样下载的是 win 64
将下载后的 protoc.exe 和 protoc-gen-go 放到 %GOPATH%\bin\ 目录下。
或者更简单的方法,直接执行如下命令就可以安装
- go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
 
第三步:下载 grpc
- # 安装 grpc
 - go get -u google.golang.org/grpc
 - # gRPC运行时接口编解码支持库
 - go get -u github.com/golang/protobuf/proto
 
在 $GOPATH/src 下新建 iswbm.com 目录及三个子目录(client,server,proto),在终端上进入该目录,执行如下命令创建 go.mod
- mkdir $GOPATH/src/iswbm.com/{client,server,proto}
 - cd mkdir $GOPATH/src/iswbm.com/
 - # 设置环境变量,确保 GO111MODULE 是开启的
 - go env -w GO111MODULE=auto
 - # 初始化项目
 - go mod init
 
编写 proto/simple.proto
- syntax = "proto3";
 - package proto;
 - option go_package ="/proto";
 - // 定义发送请求信息
 - message SimpleRequest{
 - // 参数类型 参数名称 标识号
 - string data = 1;
 - }
 - // 定义响应信息
 - message SimpleResponse{
 - int32 code = 1;
 - string value = 2;
 - }
 - // 定义我们的服务(可以定义多个服务,每个服务可以定义多个接口)
 - service Simple{
 - rpc GetSimpleInfo(SimpleRequest) returns (SimpleResponse){};
 
在 iswbm.com 目录下,执行如下命令
- protoc --go_out=. ./proto/simple.proto
 - protoc --go-grpc_out=. ./proto/simple.proto
 
完成后,会在当前目录下生成一个 simple 目录,该目录下有一个 simple.pb.go 和 simple_grpc.pb.go
- package main
 - import (
 - "context"
 - pb "iswbm.com/proto"
 - "google.golang.org/grpc"
 - "log"
 - "net"
 - )
 - const (
 - Address string = ":8000"
 - Network string = "tcp"
 - )
 - // 定义我们的服务
 - type SimpleService struct{
 - pb.UnimplementedSimpleServer
 - }
 - // 实现 GetSimpleInfo 方法
 - func (s *SimpleService) GetSimpleInfo(ctx context.Context, req *pb.SimpleRequest) (*pb.SimpleResponse, error) {
 - data := req.Data
 - log.Println("get from client: ", data)
 - resp := &pb.SimpleResponse{
 - Code: 8888,
 - Value: "grpc",
 - }
 - return resp, nil
 - }
 - func main() {
 - // 1.监听端口
 - listener, err := net.Listen(Network, Address)
 - if err != nil {
 - log.Fatalf("net.listen err: %v", err)
 - }
 - log.Println(Address, " net listening...")
 - // 2.实例化gRPC服务端
 - grpcServer := grpc.NewServer()
 - // 3.注册我们实现的服务 SimpleService
 - pb.RegisterSimpleServer(grpcServer, &SimpleService{})
 - // 4.启动gRPC服务端
 - err = grpcServer.Serve(listener)
 - if err != nil {
 - log.Fatalf("grpc server err: %v",err)
 - }
 - }
 
完成后,先安装依赖包
- go install
 
执行如下命令运行服务端
- > go run server/server.go
 - 2021/07/28 18:31:42 :8000 net listening...
 
- package main
 - import (
 - "context"
 - "google.golang.org/grpc"
 - "log"
 - pb "iswbm.com/proto"
 - )
 - const (
 - Address string = ":8000"
 - )
 - func main() {
 - // 1.创建于gRPC服务端的连接
 - conn, err := grpc.Dial(Address, grpc.WithInsecure())
 - if err != nil {
 - log.Fatalf("dial conn err: %v", err)
 - }
 - defer conn.Close()
 - // 2.创建grpc客户端
 - client := pb.NewSimpleClient(conn)
 - // 3.调用服务端提供的服务
 - req := pb.SimpleRequest{
 - Data: "Hello,Server",
 - }
 - resp, err := client.GetSimpleInfo(context.Background(), &req)
 - if err != nil {
 - log.Fatalf("resp err: %v", err)
 - }
 - log.Printf("get from server,code: %v,value: %v", resp.Code, resp.Value)
 - }
 
执行如下命令运行,立马就能收到来自 server 返回的消息
- > go run client/client.go
 - 2021/07/28 18:54:35 get from server,code: 8888,value: grpc
 
同时,在 server 端也会打印来自 client 端的消息
- > go run server/server.go
 - 2021/07/28 18:51:59 :8000 net listening...
 - 2021/07/28 18:54:35 get from client: Hello,Server
 
本文转载自微信公众号「Go编程时光」,可以通过以下二维码关注。转载本文请联系Go编程时光公众号。
                当前题目:从0到1:带你完整写一个GolangGrpc服务
                
                网站URL:http://www.csdahua.cn/qtweb/news28/77028.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网