1#ifndef NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_SERVER_HPP__
26NEFORCE_BEGIN_NAMESPACE__
79 struct NEFORCE_API session_manager {
86 size_t max_sessions_{10000};
88 string generate_session_id();
93 session_manager(
const session_manager&) =
delete;
94 session_manager& operator=(
const session_manager&) =
delete;
96 session_manager(session_manager&&)
noexcept =
default;
97 session_manager& operator=(session_manager&&)
noexcept =
default;
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;
112 session_manager session_manager_;
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);
119 static http_session* get_or_create_session(
http_request& request,
bool create, session_manager& manager,
120 const http_cookie_name&
name);
222 NEFORCE_NODISCARD
bool is_running() const noexcept {
return server_->is_running(); }
237 bool start(
int backlog = SOMAXCONN) {
return server_->start(backlog); }
242 void stop() noexcept { server_->stop(); }
260NEFORCE_END_NAMESPACE__
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
设置会话清理间隔
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)
获取当前线程名称
static const http_cookie_name & JSESSIONID()
Java/JSP会话ID