1#ifndef NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
29NEFORCE_BEGIN_NAMESPACE__
81 struct NEFORCE_API session_manager {
100 void remove_session(const
string& session_id) noexcept;
101 void cleanup_expired_sessions();
102 bool session_exists(const
string& session_id) const noexcept;
104 size_t session_count() const noexcept;
105 void set_cleanup_interval(
seconds interval) noexcept;
113 mutable mutex h2c_mutex_;
116 session_manager session_manager_;
122 mutable mutex conn_mutex_;
125 static http_request parse_request(
tcp_socket* client_socket, session_manager& manager,
const http_cookie_name& name,
129 static http_session* get_or_create_session(http_request& request,
bool create, session_manager& manager,
130 const http_cookie_name& name);
285 upgrade_handlers_[
move(protocol)] =
move(handler);
298 NEFORCE_NODISCARD
bool is_running() const noexcept {
return server_->is_running(); }
313 bool start(
int backlog = SOMAXCONN) {
return server_->start(backlog); }
318 void stop() noexcept { server_->stop(); }
336NEFORCE_END_NAMESPACE__
void set_max_sessions(size_t max) noexcept
设置最大会话数
http_server(ports port, io_context &ioc, ssl_context ctx, size_t worker_count=0)
构造HTTPS服务器
bool enable_websocket
是否启用WebSocket
void add_sni_host(const string &hostname, ssl_context ctx)
添加SNI多域名证书
void set_session_cleanup_interval(seconds interval) noexcept
设置会话清理间隔
tcp_socket socket_type
Socket类型
bool enable_connect
是否启用CONNECT隧道
const tcp_server_base * server() const noexcept
获取底层服务器常量指针
milliseconds body_read_timeout
请求体读取超时(毫秒)
byte_size max_server_body_size
最大请求体大小
void stop() noexcept
停止服务器
void set_session_store(unique_ptr< session_store > store) noexcept
设置自定义会话存储后端
sni_manager & sni() noexcept
获取SNI管理器
websocket_server & websocket() noexcept
获取WebSocket服务器引用
void set_cookie_name(http_cookie_name name) noexcept
设置会话Cookie名称
bool is_running() const noexcept
检查服务器是否运行中
size_t max_connections_per_ip
每IP最大连接数(0=不限制)
byte_size max_server_header_size
最大请求头大小
const websocket_server & websocket() const noexcept
获取WebSocket服务器常量引用
bool load_certificate(const string &cert_file, const string &key_file)
加载SSL证书
tcp_server_base * server() noexcept
获取底层服务器指针
bool start(int backlog=SOMAXCONN)
启动服务器
size_t max_header_count
最大请求头数量
http_server(ports port, io_context &ioc, size_t worker_count=0)
构造HTTP服务器
const http_cookie_name & cookie_name() const noexcept
获取会话Cookie名称
const sni_manager & sni() const noexcept
获取SNI管理器常量引用
void set_upgrade_handler(string protocol, function< bool(http_request &, tcp_socket *)> handler)
注册协议升级处理器
const http_router & router() const noexcept
获取路由器常量引用
ports port() const noexcept
获取监听端口
size_t max_h2c_upgrades
最大h2c升级连接数
http_session * get_session(http_request &request, bool create=false)
获取会话(从请求中)
http_router & router() noexcept
获取路由器引用
http::session_store * session_store() noexcept
获取会话存储后端
SNI (Server Name Indication) 证书管理器
constexpr const T & max(const T &a, const T &b, Compare comp) noexcept(noexcept(comp(a, b)))
返回两个值中的较大者
duration< int64_t > seconds
秒持续时间
duration< int64_t, milli > milliseconds
毫秒持续时间
http_server_request http_request
HTTP请求类型别名
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string< char > string
字符字符串
static const http_cookie_name & JSESSIONID()
Java/JSP会话ID
size_t max_sessions_
最大会话数
condition_variable cv_
条件变量
unordered_map< string, http_session > sessions_
会话存储
seconds cleanup_interval_
清理间隔
thread cleanup_thread_
清理线程
atomic< bool > cleanup_running_
清理线程运行标志