NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
grpc.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_HTTP_GRPC_HPP__
2#define NEFORCE_NETWORK_HTTP_GRPC_HPP__
3
8
12NEFORCE_BEGIN_NAMESPACE__
13NEFORCE_BEGIN_HTTP__
14
52
53NEFORCE_INLINE17 constexpr string_view GRPC_CONTENT_TYPE = "application/grpc";
54NEFORCE_INLINE17 constexpr string_view GRPC_CONTENT_TYPE_PROTO = "application/grpc+proto";
55
59enum class grpc_status : uint8_t {
60 OK = 0,
61 CANCELLED = 1,
62 UNKNOWN = 2,
63 INVALID_ARGUMENT = 3,
64 DEADLINE_EXCEEDED = 4,
65 NOT_FOUND = 5,
66 ALREADY_EXISTS = 6,
67 PERMISSION_DENIED = 7,
68 RESOURCE_EXHAUSTED = 8,
69 FAILED_PRECONDITION = 9,
70 ABORTED = 10,
71 OUT_OF_RANGE = 11,
72 UNIMPLEMENTED = 12,
73 INTERNAL = 13,
74 UNAVAILABLE = 14,
75 DATA_LOSS = 15,
76 UNAUTHENTICATED = 16,
77};
78
88struct grpc_message {
89 bool compressed{false};
90 byte_vector payload;
91
92 grpc_message() = default;
93 grpc_message(byte_vector data, bool comp = false) :
94 compressed(comp),
95 payload(move(data)) {}
96};
97
104class NEFORCE_API grpc_framer {
105public:
108
109 grpc_framer() = default;
110
114 static byte_vector encode(const grpc_message& msg);
115
120
130 int decode(const byte_t* data, size_t len, vector<grpc_message>& out);
131};
132
156class NEFORCE_API grpc_handler {
157public:
158 using unary_handler = function<grpc_message(const grpc_message&)>;
159 using stream_handler = function<void(const grpc_message&, function<void(grpc_message)>)>;
160
161 grpc_handler() = default;
162 virtual ~grpc_handler() = default;
163
169 void process_unary(http_request& request, http_response& response, unary_handler handler);
170
174 static void send_error(http_response& response, grpc_status status, const string& message);
175
180
181private:
182 grpc_framer framer_;
183};
184
185// TODO: Client streaming support — implement request-streaming handler with backpressure and flow control
186// TODO: Server streaming support — implement response-streaming handler with chunked gRPC frames
187// TODO: Bidirectional streaming support — full duplex bidi streaming with concurrent read/write channels
188// TODO: Protobuf integration — code generation from .proto files, typed request/response wrappers (beyond raw byte_vector)
189// TODO: gRPC-Web support — gRPC-Web protocol translation for browser-based gRPC clients (text and binary modes)
190// TODO: gRPC interceptor chain — unary/stream interceptor stack for logging, auth, metrics, tracing
191 // gRPC
193
194NEFORCE_END_HTTP__
195NEFORCE_END_NAMESPACE__
196#endif // NEFORCE_NETWORK_HTTP_GRPC_HPP__
字节大小表示和转换工具
函数包装器主模板声明
gRPC消息帧编解码器
byte_size max_receive_size
最大接收消息大小(默认4MB)
static byte_vector encode(const grpc_message &msg)
编码消息为gRPC帧格式的字节块
int decode(const byte_t *data, size_t len, vector< grpc_message > &out)
从字节块解码gRPC帧
static byte_vector encode_messages(const vector< grpc_message > &messages)
编码多个消息(连续写入同一buffer)
static void send_error(http_response &response, grpc_status status, const string &message)
发送gRPC错误响应
void process_unary(http_request &request, http_response &response, unary_handler handler)
处理一元(unary) gRPC调用
static http_status grpc_to_http_status(grpc_status status) noexcept
将gRPC状态映射到HTTP状态码
动态大小数组容器
通用函数包装器
vector< byte_t > byte_vector
字节向量类型别名
unsigned char byte_t
字节类型,定义为无符号字符
unsigned char uint8_t
8位无符号整数类型
http_server_response http_response
HTTP响应类型别名
http_server_request http_request
HTTP请求类型别名
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
grpc_status
gRPC 状态码
http_status
HTTP状态码枚举
HTTP服务器消息结构