掌握 gRPC:从安装到构建第一个 C++ 和 Python 微服务

gRPC(Google Remote Procedure Call)是一个高性能、开源的远程过程调用(RPC)框架,它支持多种编程语言,并且可以在不同的系统之间实现高效的通信。本文将介绍如何安装 gRPC,并构建一个简单的 C++ 和 Python 微服务。

一、环境准备与安装

首先,我们需要安装 gRPC。以下是在 Ubuntu 系统下的安装步骤:

  1. 安装依赖包bash sudo apt update sudo apt install -y build-essential autoconf libtool pkg-config sudo apt install -y clang libc++-dev

  2. 克隆 gRPC 仓库bash git clone -b v1.40.0 https://github.com/grpc/grpc.git cd grpc git submodule update --init

  3. 编译和安装bash mkdir -p cmake/build cd cmake/build cmake .. make sudo make install

  4. 安装 Python gRPC 库bash pip install grpcio grpcio-tools

二、定义服务

在 gRPC 中,我们通常通过 Protocol Buffers(protobuf)来定义服务接口。创建一个名为 helloworld.proto 的文件,内容如下:

syntax = "proto3";

package helloworld;

// 定义服务
service Greeter {
    // 定义一个方法
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// 请求消息
message HelloRequest {
    string name = 1;
}

// 响应消息
message HelloReply {
    string message = 1;
}

三、生成代码

在终端中运行以下命令,生成 C++ 和 Python 的 gRPC 代码:

# 生成 C++ 代码
protoc -I. --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` helloworld.proto

# 生成 Python 代码
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto

四、实现服务端(C++)

创建一个名为 server.cpp 的文件,并编写以下代码:

#include <iostream>
#include <memory>
#include <string>

#include <grpcpp/grpcpp.h>
#include "helloworld.pb.h"
#include "helloworld.grpc.pb.h"

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using helloworld::Greeter;
using helloworld::HelloRequest;
using helloworld::HelloReply;

class GreeterServiceImpl final : public Greeter::Service {
    Status SayHello(ServerContext* context, const HelloRequest* request, HelloReply* reply) override {
        std::string prefix("Hello ");
        reply->set_message(prefix + request->name());
        return Status::OK;
    }
};

void RunServer() {
    std::string server_address("0.0.0.0:50051");
    GreeterServiceImpl service;

    ServerBuilder builder;
    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
    builder.RegisterService(&service);
    std::unique_ptr<Server> server(builder.BuildAndStart());
    std::cout << "Server listening on " << server_address << std::endl;

    server->Wait();
}

int main(int argc, char** argv) {
    RunServer();
    return 0;
}

五、实现客户端(Python)

创建一个名为 client.py 的文件,编写以下代码:

import grpc
import helloworld_pb2
import helloworld_pb2_grpc

def run():
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = helloworld_pb2_grpc.GreeterStub(channel)
        response = stub.SayHello(helloworld_pb2.HelloRequest(name='world'))
    print("Greeter client received: " + response.message)

if __name__ == '__main__':
    run()

六、运行服务

  1. 启动服务端bash g++ server.cpp helloworld.pb.cc helloworld.grpc.pb.cc -o server -lgrpc++ -lprotobuf -lpthread ./server

  2. 启动客户端bash python client.py

总结

通过以上步骤,我们成功构建了一个简单的 gRPC 微服务框架,包含 C++ 实现的服务端和 Python 实现的客户端。gRPC 提供了一种快速、高效的方式来实现微服务之间的通信。希望本文能够帮助你理解 gRPC 的基本用法,并引导你进行更复杂的应用开发。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部