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
16NEFORCE_BEGIN_NAMESPACE__
17
22
30class NEFORCE_API tcp_server_base {
31public:
33 using exception_handler_t = function<void(const exception&)>;
34
35protected:
42
43#ifdef NEFORCE_PLATFORM_WINDOWS
44 ::WSAEVENT wake_event_{WSA_INVALID_EVENT};
45#else
46 pipe wake_pipe_;
47#endif
48 mutable shared_mutex handler_mutex_;
49
53
57 void notify_stop() noexcept;
58
63
71 virtual void handle_client(unique_ptr<tcp_socket> client) {
72 if (client_handler_) {
73 client_handler_(move(client));
74 }
75 }
76
85
93 virtual void create_acceptor(const ip_address& endpoint, int backlog) = 0;
94
95public:
102 explicit tcp_server_base(ports port, size_t worker_count = thread_pool::max_thread_threshhold());
103
109 virtual ~tcp_server_base() { stop(); }
110
111 tcp_server_base(const tcp_server_base&) = delete;
112 tcp_server_base& operator=(const tcp_server_base&) = delete;
113
114 tcp_server_base(tcp_server_base&& other) noexcept = delete;
115 tcp_server_base& operator=(tcp_server_base&& other) noexcept = delete;
116
125
132
141 virtual bool start(int backlog = SOMAXCONN) noexcept;
142
148 void stop();
149
154 NEFORCE_NODISCARD bool is_running() const noexcept { return running_; }
155
160 NEFORCE_NODISCARD ports port() const noexcept { return port_; }
161};
162
177class NEFORCE_API tcp_server final : public tcp_server_base {
178private:
179 void create_acceptor(const ip_address& endpoint, int backlog) override;
180 optional<unique_ptr<tcp_socket>> accept_one() override;
181
182public:
184};
185 // TCP
187
192
219class NEFORCE_API ssl_server final : public tcp_server_base {
220private:
221 ssl_context ssl_ctx_;
222
223private:
224 void create_acceptor(const ip_address& endpoint, int backlog) override;
225 optional<unique_ptr<tcp_socket>> accept_one() override;
226
227public:
233 explicit ssl_server(ports port, size_t worker_count = thread_pool::max_thread_threshhold());
234
241 bool load_certificate(const string& cert_file, const string& key_file);
242
249
254 NEFORCE_NODISCARD ssl_context& get_ssl_context() noexcept { return ssl_ctx_; }
255
260 NEFORCE_NODISCARD const ssl_context& get_ssl_context() const noexcept { return ssl_ctx_; }
261
269 bool start(int backlog = SOMAXCONN) noexcept override;
270};
271 // SSL/TLS
273
274NEFORCE_END_NAMESPACE__
275#endif // NEFORCE_NETWORK_TCP_TCP_SERVER_HPP__
函数包装器主模板声明
IP地址封装类
非递归互斥锁
可选值类
阻塞式匿名管道类
共享互斥锁类
SSL/TLS上下文管理类
void set_ssl_context(ssl_context ctx)
设置SSL上下文
ssl_context & get_ssl_context() noexcept
获取SSL上下文
bool start(int backlog=SOMAXCONN) noexcept override
启动SSL服务器
bool load_certificate(const string &cert_file, const string &key_file)
加载证书和私钥
const ssl_context & get_ssl_context() const noexcept
获取常量SSL上下文
ssl_server(ports port, size_t worker_count=thread_pool::max_thread_threshhold())
构造函数
TCP服务器基类
virtual optional< unique_ptr< tcp_socket > > accept_one()=0
创建一个客户端连接
mutex acceptor_mutex_
TCP接受器互斥锁
thread_pool client_pool_
客户端处理线程池
void accept_loop()
接受连接的主循环
bool set_client_handler(client_handler_t handler)
设置客户端处理器
client_handler_t client_handler_
客户端处理器
function< void(const exception &)> exception_handler_t
异常处理器类型
void notify_stop() noexcept
向 wake_pipe_ 写端写入一个字节,唤醒 accept_loop
size_t worker_count_
工作线程数
void stop()
停止服务器
exception_handler_t exception_handler_
异常处理器
ports port_
监听端口
bool set_exception_handler(exception_handler_t handler)
设置异常处理器
vector< thread > worker_threads_
工作线程列表
bool is_running() const noexcept
检查服务器是否运行中
virtual void create_acceptor(const ip_address &endpoint, int backlog)=0
创建并配置acceptor
virtual bool start(int backlog=SOMAXCONN) noexcept
启动服务器
function< void(unique_ptr< tcp_socket >)> client_handler_t
客户端处理器类型
virtual void handle_client(unique_ptr< tcp_socket > client)
处理单个客户端连接
atomic< bool > running_
运行标志
virtual ~tcp_server_base()
析构函数
ports port() const noexcept
获取监听端口
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实现
通用原子类型模板
异常基类
网络端口封装类
线程池实现