NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
http_server.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
3
21
26NEFORCE_BEGIN_NAMESPACE__
27NEFORCE_BEGIN_HTTP__
28
33
68class NEFORCE_API http_server {
69public:
71
72private:
79 struct NEFORCE_API session_manager {
81 mutable mutex mutex_;
82 atomic<bool> cleanup_running_;
83 thread cleanup_thread_;
84 random_mt rand_;
85 seconds cleanup_interval_{300};
86 size_t max_sessions_{10000};
87
88 string generate_session_id();
89
90 session_manager();
91 ~session_manager();
92
93 session_manager(const session_manager&) = delete;
94 session_manager& operator=(const session_manager&) = delete;
95
96 session_manager(session_manager&&) noexcept = default;
97 session_manager& operator=(session_manager&&) noexcept = default;
98
99 http_session* get_session(const string& session_id, bool create = true);
100 void remove_session(const string& session_id) noexcept;
101 void cleanup_expired_sessions();
102 bool session_exists(const string& session_id) const noexcept;
103
104 size_t session_count() const noexcept;
105 void set_cleanup_interval(seconds interval) noexcept;
106 void set_max_sessions(size_t max) noexcept;
107 };
108
110 http_router router_;
111 websocket_server ws_server_;
112 session_manager session_manager_;
113
115
116 static http_request parse_request(tcp_socket* client_socket, session_manager& manager, const http_cookie_name& name,
117 byte_size max_header_size, byte_size max_body_size);
118
119 static http_session* get_or_create_session(http_request& request, bool create, session_manager& manager,
120 const http_cookie_name& name);
121
122public:
125 bool enable_websocket{true};
126
127private:
128 void handle_client(tcp_socket client_socket);
129 bool try_websocket_upgrade(tcp_socket& client_socket, http_request& request);
130 void handle_request_with_forward(tcp_socket& client_socket, http_request& request, http_session* sess);
131
132public:
138 explicit http_server(ports port, size_t worker_count = thread_pool::max_thread_threshhold());
139
146 http_server(ports port, ssl_context ctx, size_t worker_count = thread_pool::max_thread_threshhold());
147
148 ~http_server() = default;
149
150 http_server(const http_server&) = delete;
151 http_server& operator=(const http_server&) = delete;
152
153 http_server(http_server&&) noexcept = default;
154 http_server& operator=(http_server&&) noexcept = default;
155
162 bool load_certificate(const string& cert_file, const string& key_file);
163
168 NEFORCE_NODISCARD http_router& router() noexcept { return router_; }
169
174 NEFORCE_NODISCARD const http_router& router() const noexcept { return router_; }
175
180 NEFORCE_NODISCARD websocket_server& websocket() noexcept { return ws_server_; }
181
186 NEFORCE_NODISCARD const websocket_server& websocket() const noexcept { return ws_server_; }
187
192 void set_cookie_name(http_cookie_name name) noexcept { cookie_name_ = move(name); }
193
198 NEFORCE_NODISCARD const http_cookie_name& cookie_name() const noexcept { return cookie_name_; }
199
204 void set_session_cleanup_interval(seconds interval) noexcept { session_manager_.set_cleanup_interval(interval); }
205
210 void set_max_sessions(size_t max) noexcept { session_manager_.set_max_sessions(max); }
211
216 NEFORCE_NODISCARD ports port() const noexcept { return server_->port(); }
217
222 NEFORCE_NODISCARD bool is_running() const noexcept { return server_->is_running(); }
223
230 NEFORCE_NODISCARD http_session* get_session(http_request& request, bool create = false);
231
237 bool start(int backlog = SOMAXCONN) { return server_->start(backlog); }
238
242 void stop() noexcept { server_->stop(); }
243
248 NEFORCE_NODISCARD tcp_server_base* server() noexcept { return server_.get(); }
249
254 NEFORCE_NODISCARD const tcp_server_base* server() const noexcept { return server_.get(); }
255};
256 // HTTP
258
259NEFORCE_END_HTTP__
260NEFORCE_END_NAMESPACE__
261#endif // NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
字节大小类
HTTP路由器类
NEFORCE_NODISCARD bool is_running() const noexcept
检查服务器是否运行中
NEFORCE_NODISCARD http_session * get_session(http_request &request, bool create=false)
获取会话(从请求中)
bool start(int backlog=SOMAXCONN)
启动服务器
NEFORCE_NODISCARD http_router & router() noexcept
获取路由器引用
NEFORCE_NODISCARD const tcp_server_base * server() const noexcept
获取底层服务器常量指针
void set_max_sessions(size_t max) noexcept
设置最大会话数
NEFORCE_NODISCARD const websocket_server & websocket() const noexcept
获取WebSocket服务器常量引用
bool enable_websocket
是否启用WebSocket
NEFORCE_NODISCARD const http_router & router() const noexcept
获取路由器常量引用
tcp_socket socket_type
Socket类型
http_server(ports port, size_t worker_count=thread_pool::max_thread_threshhold())
构造HTTP服务器
byte_size max_server_body_size
最大请求体大小
byte_size max_server_header_size
最大请求头大小
void set_cookie_name(http_cookie_name name) noexcept
设置会话Cookie名称
NEFORCE_NODISCARD websocket_server & websocket() noexcept
获取WebSocket服务器引用
http_server(ports port, ssl_context ctx, size_t worker_count=thread_pool::max_thread_threshhold())
构造HTTPS服务器
NEFORCE_NODISCARD const http_cookie_name & cookie_name() const noexcept
获取会话Cookie名称
NEFORCE_NODISCARD tcp_server_base * server() noexcept
获取底层服务器指针
bool load_certificate(const string &cert_file, const string &key_file)
加载SSL证书
void stop() noexcept
停止服务器
NEFORCE_NODISCARD ports port() const noexcept
获取监听端口
void set_session_cleanup_interval(seconds interval) noexcept
设置会话清理间隔
非递归互斥锁
梅森旋转随机数生成器
SSL/TLS上下文管理类
TCP服务器基类
TCP Socket类
线程类
独占智能指针
无序映射容器
WebSocket服务器类
constexpr const T & max(const T &a, const T &b, Compare comp) noexcept(noexcept(comp(a, b)))
返回两个值中的较大者
duration< int64_t > seconds
秒持续时间
http_server_request http_request
HTTP请求类型别名
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称
HTTP路由器实现
随机数生成器
通用原子类型模板
HTTP会话结构
网络端口封装类
raw port
端口值
TCP服务器实现
WebSocket协议实现