grpc使用

1 准备工具

对于go语言项目怎么用protobuf,官方有完整的资料说明,地址 Protocol Buffer Basics: Go | Protocol Buffers Documentation

1.1 获取编译工具(protoc)

首先需要一个编译工具,对应的就是一个可执行文件比如protoc.exe,protoc运行是把.proto文件转换为 c++统一格式的内存数据, 然后由语言插件把内存数据转换为各自语言的代码文件,比如go语言就提供了protoc-gen-go插件。

要获取protoc,去官网下载zip包解压即可使用,windows、linux版本都有。参照protocol-buffers官网的下载说明, 要去github上release page下载需要的版本,地址看上面官网获取。

windows上,我们下载得到protoc-21.9-win64.zip,解压后把bin目录下的protoc.exe放到PATH下。我选择把可执行文件 复制到已经配置好的PATH路径下,比如C:\Program Files\Go\bin下。

1.2 获取编译工具go语言的插件

protoc-gen-go语言插件用go get就能下载,可执行文件会被放到GOPATH/bin下。

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

有了protoc和protoc-gen-go, 使用protoc命令,就能把一个.proto文件转换为一个 .go文件。

protoc --go_out=. *.proto

1.3 获取编译工具的grpc插件

对于旧版本的protoc工具,只要安装完了protoc工具,就能使用protoc命令,把一个定义了grpc的.protoc文件转换为.go文件, 命令要用protoc --go_out=plugins=grpc:. hello.proto。

但是新版本google.golang.org/protobuf/ 不再支持gRPC服务定义,如果想要生成grpc代码需要使用新插件 protoc-gen-go-grpc。

安装插件,也是用go get下载,可执行文件会被放到GOPATH/bin下。

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

使用命令

protoc --go-grpc_out=. *.proto

2 一个demo

写一个article.proto文件,在路径 use_grpc/v1/article.proto

用工具生成article.pb.go和article_grpc.pb.go, 在目录 use_grpc/v1/proto

grpc的server服务,在目录 /use_grpc/v1/server

grpc的client服务,在目录 /use_grpc/v1/client

2.1 proto转pb

先按照protobuf官方使用要求,安装protoc工具,安装protoc-gen-go插件,安装protoc-gen-go-grpc插件。

1、编写proto文件, 这里的例子是article.proto。

//proto3标准
syntax = "proto3";

option go_package = "./proto";

package Article;

// 定义rpc接口
service Article {
  rpc ArticleAdd (AddRequest) returns (AddResponse) {}
}

//AddRequest协议内容
message AddResponse {
  string data = 1;
}

//AddRequest协议内容
message AddRequest {
  string name = 1;
  string content = 2;
}

2、然后进入项目目录 /use_grpc/v1下,即article.proto所在目录下,执行如下两个命令

protoc --go_out=. *.proto
protoc --go-grpc_out=. *.proto

3、会在项目目录下生成一个proto目录,里面得到两个文件

  • article.pb.go
  • article_grpc.pb.go

2.2 实现server

我们需要创建一个struct,它要实现article_grpc.pb.go文件中定义的接口ArticleServer,具体的方式,就是我们的业务逻辑实现。

package main

import (
	"context"
	"google.golang.org/grpc"
	"log"
	"net"
	"swwgo/basic/use_grpc/v1/proto"
)

func main() {
	lis, err := net.Listen("tcp", "0.0.0.0:1001")
	if err != nil {
		log.Fatalln("failed to listen")
	}

	grpcServer := grpc.NewServer()
	proto.RegisterArticleServer(grpcServer, new(ArticleServer))
	grpcServer.Serve(lis)
}

type ArticleServer struct {
	proto.UnimplementedArticleServer
}

func (s ArticleServer) ArticleAdd(ctx context.Context, request *proto.AddRequest) (*proto.AddResponse, error) {
	res := &proto.AddResponse{
		Data: request.Name + " " + request.Content,
	}
	return res, nil
}

2.3 实现client

实现client非常简单,直接使用文件中定义的NewArticleClient()就可以。

package main

import (
	"context"
	"google.golang.org/grpc"
	"google.golang.org/grpc/metadata"
	"log"
	"swwgo/basic/use_grpc/v1/proto"
	"time"
)

func main() {
	conn, err := grpc.Dial(":1001", grpc.WithInsecure())

	if err != nil {
		log.Fatalln("did not connect")
	}
	defer conn.Close()

	c := proto.NewArticleClient(conn)

	// 可以传递一些meta信息
	paramCtx := context.Background()
	pairs := metadata.Pairs("k1", "v1", "k2", "v2")
	outgoingContext := metadata.NewOutgoingContext(paramCtx, pairs)

	ctx, cancel := context.WithTimeout(outgoingContext, time.Second)
	defer cancel()
	res, err := c.ArticleAdd(ctx, &proto.AddRequest{Name: "xiaoming", Content: "beijing"})
	if err != nil {
		log.Fatalf("could not add article %v", err)
	}
	log.Printf("response: %s", res.Data)
}

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VxWorks中使用gRPC,你可以按照以下步骤进行: 1. 准备VxWorks环境:确保你已经配置好VxWorks开发环境,包括安装和设置好VxWorks SDK。 2. 下载gRPC和protobuf:从gRPC的GitHub仓库中下载gRPC和protobuf的源代码,或者使用包管理工具(如pip)进行安装。 3. 定义gRPC接口:使用Protocol Buffers语言(proto)定义远程过程接口和消息结构。创建一个.proto文件,描述你的服务和消息结构。 4. 生成代码:使用protoc工具来生成VxWorks所需的代码。运行以下命令: ``` protoc --grpc_out=. --plugin=protoc-gen-grpc=<path_to_grpc_cpp_plugin> --cpp_out=. your_service.proto ``` 将 `<path_to_grpc_cpp_plugin>` 替换为你的机器上实际的 gRPC C++ 插件路径。 5. 创建VxWorks应用程序:在VxWorks中创建一个新的应用程序或打开现有的应用程序。 6. 添加gRPC和protobuf依赖:将生成的代码和gRPC以及protobuf的库文件添加到你的VxWorks应用程序中。确保正确设置包含路径和链接选项。 7. 实现gRPC服务端:在VxWorks应用程序中实现你的gRPC服务端逻辑。创建一个类继承自你生成的gRPC服务接口,并实现相应的远程过程调用方法。 8. 实现gRPC客户端:在VxWorks应用程序中实现你的gRPC客户端逻辑。创建一个gRPC客户端对象,通过调用服务端的远程过程来进行通信。 9. 构建和部署:使用VxWorks SDK将你的应用程序构建为可执行文件,并将其部署到VxWorks系统中。 10. 启动服务端和客户端:在VxWorks系统中启动服务端和客户端应用程序。服务端应处于监听状态,等待来自客户端的gRPC调用请求。 11. 远程过程调用:通过客户端应用程序调用服务端的远程过程。gRPC将负责将调用请求传递给服务端,并将响应返回给客户端。 需要注意的是,以上步骤提供了一个基本的框架来在VxWorks中使用gRPC。具体的实现细节和配置可能因项目需求和VxWorks版本而有所不同。你可能还需要参考VxWorks的官方文档和相关资料,以了解更多关于在VxWorks中使用gRPC的详细步骤和指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值