VLink 2.0.0
A high-performance communication middleware
载入中...
搜索中...
未找到
server.h 文件参考

Type-safe method-model server (handler side) for VLink RPC. 更多...

#include <functional>
#include <memory>
#include <string>
#include "./impl/server_impl.h"
#include "./node.h"
#include "./internal/server-inl.h"
server.h 的引用(Include)关系图:
此图展示该文件被哪些文件直接或间接地引用了:

浏览该文件的源代码.

 Type-safe server for the VLink method (RPC) communication model. 更多...
 Convenience alias for Server with message security enabled. 更多...

命名空间

详细描述

Type-safe method-model server (handler side) for VLink RPC.

Server<ReqT, RespT, SecT> is the handler side of the VLink method model. It registers a callback that is invoked for each incoming request and optionally fills a response.

Method Model Overview
Client<Req,Resp> Server<Req,Resp>
| Transport Back-end |
|-- invoke(req) -------> | |
| serialize(req) |-- request delivery ---------> |
| | |--> callback(req, resp)
| | <-- reply(resp) ------------- |
| deserialize(resp) | <-- response delivery ------- |
|<-- resp ---------------- |
Three Listen Modes
Method When to use
listen(ReqCallback) Fire-and-forget.
listen(ReqRespCallback) Synchronous reply inside the callback.
listen_for_reply(ReqAsyncRespCallback) Async reply via reply().
Synchronous Reply Example
Server<Req, Resp> server("dds://my_service");
server.listen([](const Req& req, Resp& resp) {
resp.result = process(req); // fill resp inside callback
});
Asynchronous Reply Example
Server<Req, Resp> server("dds://my_service");
uint64_t saved_req_id = 0;
server.listen_for_reply([&saved_req_id](uint64_t req_id, const Req& req) {
saved_req_id = req_id; // save request ID for later
});
// ... later, from any thread:
server.reply(saved_req_id, Resp{...});
Fire-and-forget Example (no response)
Server<Req> server("dds://my_service"); // RespT defaults to EmptyType
server.listen([](const Req& req) {
handle(req);
});
注解
Calling listen() / listen_for_reply() more than once is fatal. reply() must only be called after listen_for_reply(); calling it after a synchronous listen() triggers a fatal log.
模板参数
ReqTRequest message type. Must satisfy Serializer::is_supported().
RespTResponse message type. Defaults to Traits::EmptyType (no response).
SecTSecurity mode; defaults to SecurityType::kWithoutSecurity.