NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
tcp_server.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
2#define NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
3
11
16NEFORCE_BEGIN_NAMESPACE__
17
22
30class NEFORCE_API tcp_server_base {
31public:
33 using exception_handler_t = function<void(const exception&)>;
34
35protected:
43
44 mutable shared_mutex handler_mutex_;
45
49
58
67 if (client_handler_) {
68 client_handler_(move(client));
69 }
70 }
71
80
88 virtual void create_acceptor(const ip_address& endpoint, int backlog) = 0;
89
90public:
98 explicit tcp_server_base(ports port, io_context& ctx, size_t worker_count = 0);
99
105 virtual ~tcp_server_base() { stop(); }
106
107 tcp_server_base(const tcp_server_base&) = delete;
108 tcp_server_base& operator=(const tcp_server_base&) = delete;
109
110 tcp_server_base(tcp_server_base&& other) noexcept = delete;
111 tcp_server_base& operator=(tcp_server_base&& other) noexcept = delete;
112
121
128
137 virtual bool start(int backlog = SOMAXCONN) noexcept;
138
144 void stop();
145
150 NEFORCE_NODISCARD bool is_running() const noexcept { return running_; }
151
156 NEFORCE_NODISCARD ports port() const noexcept { return port_; }
157};
158
173class NEFORCE_API tcp_server final : public tcp_server_base {
174private:
175 void create_acceptor(const ip_address& endpoint, int backlog) override;
176 optional<unique_ptr<tcp_socket>> accept_one() override;
177
178public:
180};
181 // TCP
183
188
215class NEFORCE_API ssl_server final : public tcp_server_base {
216private:
217 ssl_context ssl_ctx_;
218
219private:
220 void create_acceptor(const ip_address& endpoint, int backlog) override;
221 optional<unique_ptr<tcp_socket>> accept_one() override;
222
223public:
230 explicit ssl_server(ports port, io_context& ctx, size_t worker_count = 0);
231
238 bool load_certificate(const string& cert_file, const string& key_file);
239
246
251 NEFORCE_NODISCARD ssl_context& get_ssl_context() noexcept { return ssl_ctx_; }
252
257 NEFORCE_NODISCARD const ssl_context& get_ssl_context() const noexcept { return ssl_ctx_; }
258
266 bool start(int backlog = SOMAXCONN) noexcept override;
267};
268 // SSL/TLS
270
271NEFORCE_END_NAMESPACE__
272#endif // NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
函数包装器主模板声明
统一异步操作核心
IP地址封装类
非递归互斥锁
SSL/TLS上下文管理类
bool start(int backlog=SOMAXCONN) noexcept override
启动SSL服务器
const ssl_context & get_ssl_context() const noexcept
获取常量SSL上下文
void set_ssl_context(ssl_context ctx)
设置SSL上下文
ssl_server(ports port, io_context &ctx, size_t worker_count=0)
构造函数
ssl_context & get_ssl_context() noexcept
获取SSL上下文
bool load_certificate(const string &cert_file, const string &key_file)
加载证书和私钥
function< void(const exception &)> exception_handler_t
异常处理器类型
client_handler_t client_handler_
客户端处理器
function< void(unique_ptr< tcp_socket >)> client_handler_t
客户端处理器类型
virtual bool start(int backlog=SOMAXCONN) noexcept
启动服务器
atomic< bool > running_
运行标志
void accept_loop()
接受连接的主循环
bool set_exception_handler(exception_handler_t handler)
设置异常处理器
io_context & ctx_
异步 I/O 执行上下文
virtual void create_acceptor(const ip_address &endpoint, int backlog)=0
创建并配置acceptor
bool is_running() const noexcept
检查服务器是否运行中
exception_handler_t exception_handler_
异常处理器
virtual optional< unique_ptr< tcp_socket > > accept_one()=0
创建一个客户端连接
unique_ptr< io_context::work > ctx_work_
io_context 工作守卫
ports port() const noexcept
获取监听端口
size_t worker_count_
工作线程数
bool set_client_handler(client_handler_t handler)
设置客户端处理器
void stop()
停止服务器
virtual ~tcp_server_base()
析构函数
vector< thread > worker_threads_
工作线程列表(含 accept 线程)
unique_ptr< tcp_acceptor > acceptor_
TCP接受器
tcp_server_base(ports port, io_context &ctx, size_t worker_count=0)
构造函数
mutex acceptor_mutex_
TCP接受器互斥锁
virtual void handle_client(unique_ptr< tcp_socket > client)
处理单个客户端连接
tcp_server_base(ports port, io_context &ctx, size_t worker_count=0)
构造函数
独占智能指针
动态大小数组容器
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
统一异步操作核心
共享互斥锁支持
SSL/TLS Acceptor实现
通用原子类型模板
网络端口封装类
系统信息查询工具