C++ gRPC helloworld 示例代码

以下是一个简单的 C++ gRPC 示例代码,它包含了服务端和客户端的实现。这个例子以简单的问候服务为例,通过 gRPC 客户端和服务器端互相发送问候消息。

服务接口定义

首先,我们需要定义服务接口。在这个例子中,我们定义了一个 Greeter 服务,它只包含了一个简单的 SayHello 方法。

syntax = "proto3";

package helloworld;

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

// 定义问候请求消息
message HelloRequest {
  string name = 1;
}

// 定义问候回复消息
message HelloReply {
  string message = 1;
}

服务端实现

下面是一个简单的服务端实现,在此实现中,我们使用了 gRPC 的 ServerBuilder 和 ServerContext 类来创建服务器,并将实现的 Greeter 服务添加到服务器中。当客户端调用 SayHello 方法时,服务器将接收 HelloRequest 消息,并返回一个包含问候信息的 HelloReply 消息。

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.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 name = request->name();
    std::cout << "Receive greeting from " << name << std::endl;

    // 组装服务器返回的问候消息
    std::string message = "Hello " + name + ", welcome to gRPC!";
    reply->set_message(message);

    return Status::OK;
  }
};

// 启动 gRPC 服务器
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;
}

相关推荐

  1. python代码示例

    2024-01-03 15:32:04       61 阅读
  2. Lucene 分词 示例代码

    2024-01-03 15:32:04       36 阅读
  3. AIGC示例代码

    2024-01-03 15:32:04       38 阅读
  4. 表单代码示例

    2024-01-03 15:32:04       28 阅读
  5. C++ gRPC helloworld 示例代码

    2024-01-03 15:32:04       57 阅读
  6. asp爬虫代码简单示例

    2024-01-03 15:32:04       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-03 15:32:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-03 15:32:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-03 15:32:04       82 阅读
  4. Python语言-面向对象

    2024-01-03 15:32:04       91 阅读

热门阅读

  1. 数据结构OJ实验7-树结构及应用

    2024-01-03 15:32:04       42 阅读
  2. MongoDB聚合:$addField

    2024-01-03 15:32:04       63 阅读
  3. 大数据系列之:读取parquet文件统计数据量

    2024-01-03 15:32:04       58 阅读
  4. Mac 彻底删除 node 和 npm

    2024-01-03 15:32:04       55 阅读
  5. 详解汇编cll ret push pop 并附源码

    2024-01-03 15:32:04       63 阅读
  6. MySQL5.7更新的内容

    2024-01-03 15:32:04       50 阅读
  7. 微服务(12)

    2024-01-03 15:32:04       51 阅读
  8. bash脚本从ini文件读取设置

    2024-01-03 15:32:04       57 阅读
  9. Word2Vec原理+gensim实现

    2024-01-03 15:32:04       66 阅读