golang gRPC示例

gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。
1、普通帐号安装protobuf

unzip protobuf-cpp-3.0.0-alpha-3.zip
cd protobuf-3.0.0-alpha-3/
./configure
make && sudo make install
go get -u github.com/golang/protobuf/protoc-gen-go #golang 插件

2、定义grpc.proto文件

syntax = "proto3";  //protobuf3协议
package inf;

//请求
message UserRq {
    int32 id = 1;
}

//响应
message UserRp {
    string name = 1;
}

//服务
service Data {
    rpc GetUser(UserRq) returns (UserRp);
}

然后编译


cd ~/src/inf
protoc --go_out=plugins=grpc:. grpc.proto

3、get 所引用的包

go get -u google.golang.org/grpc

由于墙的原因,我们一些依赖的包文件可以通过下面方式下载到:
在 github 可以找到源码,下载后复制到对应目录即可的:
google.golang.org/grpc 对应的代码地址在: https://github.com/grpc/grpc-go
google.golang.org/cloud/compute/metadata 对应的代码地址在: https://github.com/GoogleCloudPlatform/gcloud-golang 不再需要
golang.org/x/oauth2 对应的代码地址在: https://github.com/golang/oauth2
golang.org/x/net/context 对应的代码地址在: https://github.com/golang/net
这些包的源码也可以通过 http://gopm.io/ 或者 http://golangtc.com/download/package 进行下载.

4、服务端代码

// grpc project main.go
package main

import (
    "inf"
    "log"
    "net"
    "runtime"
    "strconv"

    "golang.org/x/net/context"
    "google.golang.org/grpc"
)

const (
    port = "41005"
)

type Data struct{}

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())    

    //起服务
    lis, err := net.Listen("tcp", ":"+port) 
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()   
    inf.RegisterDataServer(s, &Data{})
    s.Serve(lis)

    log.Println("grpc server in: %s", port)
}


// 定义方法
func (t *Data) GetUser(ctx context.Context, request *inf.UserRq) (response *inf.UserRp, err error) {
    response = &inf.UserRp{
        Name: strconv.Itoa(int(request.Id)) + ":test",
    }
    return response, err
}

5、客户端代码

package main

import (
    "inf"
    "log"
    "runtime"
    "strconv"
    "strings"
    "sync"
    "time"

    "math/rand"

    "golang.org/x/net/context"
    "google.golang.org/grpc"
)

var (
    wg sync.WaitGroup   
)

const (
    networkType = "tcp"
    server      = "127.0.0.1"
    port        = "41005"
    parallel    = 50        //连接并行度
    times       = 100000    //每连接请求次数
)

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    currTime := time.Now()

    //并行请求
    for i := 0; i < int(parallel); i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            exe()
        }()
    }
    wg.Wait()

    log.Printf("time taken: %.2f ", time.Now().Sub(currTime).Seconds())
}

func exe() {
    //建立连接
    conn, _ := grpc.Dial(server + ":" + port)
    defer conn.Close()
    client := inf.NewDataClient(conn)

    for i := 0; i < int(times); i++ {
        getUser(client)
    }
}

func getUser(client inf.DataClient) {
    var request inf.UserRq
    r := rand.Intn(parallel)
    request.Id = int32(r)

    response, _ := client.GetUser(context.Background(), &request) //调用远程方法

    //判断返回结果是否正确
    if id, _ := strconv.Atoi(strings.Split(response.Name, ":")[0]); id != r {
        log.Printf("response error  %#v", response)
    }

}

引用

http://www.infoq.com/cn/news/2015/03/grpc-google-http2-protobuf
https://github.com/google/protobuf
https://github.com/golang/protobuf
http://studygolang.com/articles/3192

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好!关于GolanggRPC环境,您可以按照以下步骤进行设置: 1. 安装Golang:首先,您需要在您的计算机上安装Golang。您可以从官方网站(https://golang.org/dl/)下载适合您操作系统的安装程序,并按照提示进行安装。 2. 安装gRPC:安装Golang之后,您可以使用以下命令通过Go模块管理器安装gRPC: ``` go get google.golang.org/grpc ``` 3. 安装protobuf:gRPC使用Protocol Buffers(简称为protobuf)作为其序列化和通信协议。您可以使用以下命令安装protobuf编译器: ``` go get google.golang.org/protobuf/cmd/protoc-gen-go ``` 4. 定义和生成gRPC服务:使用protobuf语言定义您的gRPC服务。首先,创建一个`.proto`文件,然后使用protobuf编译器生成Golang代码。示例: ```protobuf syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; } ``` 使用以下命令生成Golang代码: ``` protoc --go_out=. --go-grpc_out=. path/to/your_service.proto ``` 5. 实现gRPC服务:在生成的Golang代码中,您将找到自动生成的服务接口和实现。您可以在实现中添加您的自定义逻辑。 6. 构建和运行:使用Golang的构建工具(如`go build`)构建您的应用程序,并运行它。 这样,您就可以开始使用GolanggRPC环境了!希望对您有所帮助。如果您有任何其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值