初识gRPC

gRPC 是由 Google 开发的一种高性能、通用的 RPC 框架,支持多种语言。它基于 HTTP/2 标准,使用 Protocol Buffers 作为接口描述语言。本文将带您通过一个简单的示例来介绍如何使用 gRPC。

首先我们需要安装grpcgrpc对应的工具,以pythongo举例:

对于go:使用 go get 安装 gRPC 的 Go 库和 Protocol Buffers 生成插件:

go get google.golang.org/grpc
go get google.golang.org/protobuf/cmd/protoc-gen-go

对于python:使用 pip 安装 gRPC:

pip install grpcio
pip install grpcio-tools

接下来我们就开始写代码啦,还是以go为例:

  1. 首先创建一个.proto文件,内容如下:

    syntax = "proto3";
    
    option go_package = "grpc/proto";
    
    service Hello {
      rpc Hello(HelloRequest) returns (HelloResponse);
    }
    
    message HelloRequest {
      string name = 1;
    }
    
    message HelloResponse {
      string response = 1;
    }
    
  2. 利用命令生成.proto对应的程序语言文件:

    生成Go文件:protoc (proto file path) --go_out=. --go-grpc_out=.

    生成Python文件:python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. (proto file path)

  3. 编写代码,分别建立clientserver包,树形目录如下

    .
    ├── go.mod
    ├── go.sum
    ├── grpc
    │   ├── client
    │   │   └── client.go
    │   ├── proto
    │   │   ├── helloworld_grpc.pb.go
    │   │   ├── helloworld.pb.go
    │   │   └── helloworld.proto
    │   └── server
    │       └── server.go
    
    

    client.go文件代码:

    package main
    
    import (
    	"context"
    	"fmt"
    
    	"google.golang.org/grpc"
    
    	"go-try/grpc/proto"
    )
    
    func main() {
    	conn, err := grpc.NewClient("0.0.0.0:8080", grpc.WithInsecure())
    	if err != nil {
    		panic(err)
    	}
    	defer conn.Close()
    
    	cli := proto.NewHelloClient(conn)
    	res, err := cli.Hello(context.Background(), &proto.HelloRequest{Name: "zs"})
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(res.Response)
    }
    
    

    server.go文件代码:

    package main
    
    import (
    	"context"
    	"google.golang.org/grpc"
    	"net"
    
    	"go-try/grpc/proto"
    )
    
    type HelloServer struct {
    	proto.UnimplementedHelloServer
    }
    
    func (s *HelloServer) Hello(ctx context.Context, request *proto.HelloRequest) (*proto.HelloResponse, error) {
    	return &proto.HelloResponse{
    		Response: "Hello " + request.Name,
    	}, nil
    }
    
    func main() {
    	server := grpc.NewServer()
    	proto.RegisterHelloServer(server, &HelloServer{})
    	listen, err := net.Listen("tcp", "0.0.0.0:8080")
    	if err != nil {
    		panic("faild to listen : " + err.Error())
    	}
    	err = server.Serve(listen)
    	if err != nil {
    		panic("faild to start grpc : " + err.Error())
    	}
    }
    			
    
  4. 分别运行client.go,server.go:

    结果如下:

    Hello zs
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值