前言
C++ gRPC(Google Remote Procedure Call)是一种高性能、开源的远程过程调用框架,用于在不同服务之间进行通信。
配置gRPC可以访问该网站:grpc配置
一.函数介绍
下面是一些常见的 C++ gRPC 函数及其功能:
-
grpc::Channel
:表示一个 gRPC 通道,客户端通过这个通道与服务端进行通信。 -
grpc::CreateChannel(const std::string& target, grpc::ChannelArguments channel_args =grpc::ChannelArguments())
:创建一个 gRPC 通道。target
是服务端地址,例如 “localhost:50051”。channel_args
是可选的通道参数,例如超时时间、压缩方式等。 -
grpc::ChannelArguments
:表示 gRPC 通道的参数,例如超时时间、压缩方式等。 -
grpc::ClientContext
:表示一个 gRPC 客户端上下文,用于存储请求和响应的相关信息。 -
grpc::Status
:表示 gRPC 请求的状态,包括请求是否成功、错误代码和错误信息等。 -
grpc::StubOptions
:表示 gRPC 存根选项,用于配置 gRPC 存根的行为。 -
grpc::ServerBuilder
:表示 gRPC 服务器构建器,用于配置 gRPC 服务器。 -
grpc::Server
:表示一个 gRPC 服务器,用于处理客户端请求。 -
grpc::ServerContext
:表示一个 gRPC 服务器上下文,用于存储请求和响应的相关信息。 -
grpc::Service
:表示一个 gRPC 服务,包含一组接口和方法,用于处理客户端请求。 -
grpc::ServerBuilder::AddListeningPort(const std::string& addr, grpc::ServerBuilder::Protocol protocol = grpc::ServerBuilder::Protocol::HTTP)
:添加一个监听端口。addr
是监听地址,例如 “localhost:50051”。protocol
是可选的协议,默认为 HTTP。 -
grpc::ServerBuilder::RegisterService(const grpc::Service* service)
:注册一个 gRPC 服务。 -
grpc::ServerBuilder::BuildAndStart()
:构建并启动 gRPC 服务器。 -
grpc::ServerBuilder::Shutdown()
:关闭 gRPC 服务器。 -
grpc::ServerBuilder::WaitForShutdown()
:等待 gRPC 服务器关闭。 -
grpc::ServerBuilder::cq()
:返回 gRPC 服务器的 completion queue(完成队列),用于处理异步请求。
二.代码演示
api.proto
syntax = "proto3";
option java_multiple_files = true;
option java_package = "io.grpc.examples.routeguide";
option java_outer_classname = "RouteGuideProto";
option objc_class_prefix = "RTG";
package routeguide;
service Route {
rpc Echo(RestRequest) returns (stream RestResponse) {
}
}
// Response
message RestResponse {
// The location from which the message is sent.
int32 code = 1;
string message = 2;
string body = 3;
}
message RestRequest {
string url = 1;
string body = 2;
}
server.cc
#include <grpc/grpc.h>
#include <string>
#include "../grpc/api.grpc.pb.h"
#include <grpcpp/security/server_credentials.h>
#include <grpcpp/server_builder.h>
#include <grpcpp/server_context.h>
#include <iostream>
#include <dlfcn.h>
#include<iostream>
using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::ServerReader