NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
tcp_server.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
2#define NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15
20
25
33class NEFORCE_API tcp_server_base {
34public:
36 using exception_handler_t = function<void(const exception&)>;
37
38protected:
44
47
55
63 virtual void handle_client(tcp_socket client) {
64 if (client_handler_) {
65 client_handler_(_NEFORCE move(client));
66 }
67 }
68
77
85 virtual void create_acceptor(const ip_address& endpoint, int backlog) = 0;
86
87public:
94 explicit tcp_server_base(ports port, size_t worker_count = thread_pool::max_thread_threshhold());
95
101 virtual ~tcp_server_base() { stop(); }
102
103 tcp_server_base(const tcp_server_base&) = delete;
104 tcp_server_base& operator=(const tcp_server_base&) = delete;
105
106 tcp_server_base(tcp_server_base&& other) noexcept = default;
107 tcp_server_base& operator=(tcp_server_base&& other) noexcept = default;
108
117
124
133 virtual bool start(int backlog = SOMAXCONN) noexcept;
134
140 void stop();
141
146 NEFORCE_NODISCARD bool is_running() const noexcept { return running_; }
147
152 NEFORCE_NODISCARD ports port() const noexcept { return port_; }
153};
154
169class NEFORCE_API tcp_server final : public tcp_server_base {
170private:
171 void create_acceptor(const ip_address& endpoint, int backlog) override;
172 optional<tcp_socket> accept_one() override;
173
174public:
176};
177 // TCP
179
184
211class NEFORCE_API ssl_server final : public tcp_server_base {
212private:
213 ssl_context ssl_ctx_;
214
215private:
216 void create_acceptor(const ip_address& endpoint, int backlog) override;
217 optional<tcp_socket> accept_one() override;
218
219public:
225 explicit ssl_server(ports port, size_t worker_count = thread_pool::max_thread_threshhold());
226
233 bool load_certificate(const string& cert_file, const string& key_file);
234
241
246 NEFORCE_NODISCARD ssl_context& get_ssl_context() noexcept { return ssl_ctx_; }
247
252 NEFORCE_NODISCARD const ssl_context& get_ssl_context() const noexcept { return ssl_ctx_; }
253
261 bool start(int backlog = SOMAXCONN) noexcept override;
262};
263 // SSL/TLS
265 // Network
267
268NEFORCE_END_NAMESPACE__
269#endif // NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
函数包装器主模板声明
IP地址封装类
可选值类
SSL/TLS上下文管理类
NEFORCE_NODISCARD ssl_context & get_ssl_context() noexcept
获取SSL上下文
void set_ssl_context(ssl_context ctx)
设置SSL上下文
NEFORCE_NODISCARD const ssl_context & get_ssl_context() const noexcept
获取常量SSL上下文
bool start(int backlog=SOMAXCONN) noexcept override
启动SSL服务器
bool load_certificate(const string &cert_file, const string &key_file)
加载证书和私钥
ssl_server(ports port, size_t worker_count=thread_pool::max_thread_threshhold())
构造函数
TCP服务器基类
virtual void handle_client(tcp_socket client)
处理单个客户端连接
thread_pool client_pool_
客户端处理线程池
function< void(tcp_socket)> client_handler_t
客户端处理器类型
void accept_loop()
接受连接的主循环
NEFORCE_NODISCARD ports port() const noexcept
获取监听端口
bool set_client_handler(client_handler_t handler)
设置客户端处理器
client_handler_t client_handler_
客户端处理器
function< void(const exception &)> exception_handler_t
异常处理器类型
NEFORCE_NODISCARD bool is_running() const noexcept
检查服务器是否运行中
void stop()
停止服务器
exception_handler_t exception_handler_
异常处理器
ports port_
监听端口
bool set_exception_handler(exception_handler_t handler)
设置异常处理器
vector< thread > worker_threads_
工作线程列表
virtual void create_acceptor(const ip_address &endpoint, int backlog)=0
创建并配置acceptor
virtual bool start(int backlog=SOMAXCONN) noexcept
启动服务器
virtual optional< tcp_socket > accept_one()=0
创建一个客户端连接
atomic< bool > running_
运行标志
virtual ~tcp_server_base()
析构函数
tcp_server_base(ports port, size_t worker_count=thread_pool::max_thread_threshhold())
构造函数
unique_ptr< tcp_acceptor > acceptor_
TCP接受器
TCP服务器类
tcp_server_base(ports port, size_t worker_count=thread_pool::max_thread_threshhold())
构造函数
TCP Socket类
独占智能指针
动态大小数组容器
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
SSL/TLS Acceptor实现
通用原子类型模板
异常基类
网络端口封装类
线程池实现