grpc基本使用


前言

grpc 是一种基于 HTTP/2 设计的RPC框架,采用protobuf作为idl (交互式数据语言Interactive Data Language) 本篇简单介绍下grpc的使用,并制作一个demo

一、安装protoc

$ go get -u github.com/golang/protobuf
$ go get -u github.com/golang/protobuf/protoc-gen-go
  • 确保protoc protoc-gen-go安装成功,可到$GOPATH/bin/ 目录下查看

二、项目创建

1.创建目录结构

hello
├── client
│ └── client.go
└── server
└── server.go
└── proto
└── hello.proto
└── hello.pb.go # 通过protoc命令生成
├── go.mod

编写proto文件
// hello.proto
syntax = "proto3";
service HelloService {
    rpc SayHello(SayHelloRequest)returns(SayHelloResponse){}
}
message SayHelloRequest{
    string name = 1;
}
message SayHelloResponse {
    string msg = 1;
}
生成pb文件  proto/hello.pb.go
$ protoc --go_out=plugins=grpc:./ ./proto/hello.proto

2 编写服务端代码

// server/server.go
package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	hello "hello/proto"
	"log"
	"net"
)

type HelloServer struct {
}

func (h *HelloServer) SayHello(ctx context.Context, request *hello.SayHelloRequest) (*hello.SayHelloResponse, error) {
	name := request.Name
	fmt.Printf("receive name : %s", name)
	msg := fmt.Sprintf("hello, %s", name)
	return &hello.SayHelloResponse{Msg: msg}, nil
}
func main() {
	server  := grpc.NewServer() // 创建gRPC Server 对象
	// 将HelloService 注册到gRPC Server 的内部注册中心;接收到请求时,通过内部的服务发现,发现该服务的端口并转接进行逻辑处理
	hello.RegisterHelloServiceServer(server,&HelloServer{})
	// 创建listen,监听tcp端口
	lis, err := net.Listen("tcp", ":8080")
	if err != nil {
		log.Fatalf("failed to listen:%+v", err)
	}
	if err := server .Serve(lis); err != nil {
		log.Fatalf("err %+v", err)
	}
}

3 编写客户端代码

// client/client.go
package main

import (
	"context"
	"google.golang.org/grpc"
	hello "hello/proto"
	"log"
)

const (
	Address = "127.0.0.1:8080"
)

func main() {
	conn, err := grpc.Dial(Address, grpc.WithInsecure())
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()
	client := hello.NewHelloServiceClient(conn)
	ctx := context.Background()
	request := &hello.SayHelloRequest{Name: "lester"}
	response, err := client.SayHello(ctx, request)
	if err != nil {
		log.Fatalf("get response err :%v", err)
	}
	log.Printf("receive response msg:%s", response.Msg)
}

  • 根目录下运行
go run server/server.go
  • 另起一个终端运行
go run client/client.go

客户端输出结果
在这里插入图片描述

在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、付费专栏及课程。

余额充值