STTNet 0.7.0
Loading...
Searching...
No Matches
stt::network::TcpServer Class Referenceabstract

Tcp服务端类 More...

#include <sttnet.h>

Inheritance diagram for stt::network::TcpServer:
stt::network::HttpServer stt::network::WebSocketServer

Public Member Functions

void putTask (const std::function< int(TcpFDHandler &k, TcpInformation &inf)> &fun, TcpFDHandler &k, TcpInformation &inf)
 把一个任务放入工作线程池由工作线程完成
 
 TcpServer (const unsigned long long &maxFD=1000000, const int &buffer_size=256, const size_t &finishQueue_cap=65536, const bool &security_open=true, const int &connectionNumLimit=20, const int &connectionSecs=1, const int &connectionTimes=6, const int &requestSecs=1, const int &requestTimes=40, const int &checkFrequency=60, const int &connectionTimeout=60)
 构造函数,默认是允许最大1000000个连接,每个连接接收缓冲区最大为256kb,启用安全模块。
 
bool startListen (const int &port, const int &threads=8)
 打开Tcp服务器监听程序
 
bool setTLS (const char *cert, const char *key, const char *passwd, const char *ca)
 以兼容模式启用双向 TLS(mTLS)。
 
bool setTLS (const char *cert, const char *key, const char *passwd="")
 启用普通单向 TLS,适用于常见 HTTPS/WSS 服务。
 
bool setTLS (const char *cert, const char *key, const char *passwd, const char *ca, TLSClientAuthMode clientAuth)
 启用 TLS 并显式选择客户端证书校验模式。
 
void redrawTLS ()
 撤销TLS加密,ca证书等
 
void setSecuritySendBackFun (std::function< void(TcpFDHandler &k, TcpInformation &inf)> fc)
 设置违反信息安全策略时候的返回函数
 
void setGlobalSolveFunction (std::function< bool(TcpFDHandler &k, TcpInformation &inf)> fc)
 设置全局备用函数
 
void setFunction (const std::string &key, std::function< int(TcpFDHandler &k, TcpInformation &inf)> fc)
 设置key对应的收到客户端消息后的回调函数
 
void setGetKeyFunction (std::function< int(TcpFDHandler &k, TcpInformation &inf)> parseKeyFun)
 设置解析出key的回调函数
 
bool stopListen ()
 停止监听
 
virtual bool close ()
 关闭监听和所有已连接的套接字
 
virtual bool close (const int &fd)
 关闭某个套接字的连接
 
void setConnectStrategy (const stt::security::RateLimitType &type)
 设置“连接速率限流”所使用的策略。
 
void setRequestStrategy (const stt::security::RateLimitType &type)
 设置“IP 级请求限流”所使用的策略。
 
void setPathStrategy (const stt::security::RateLimitType &type)
 设置“path 级请求限流”所使用的策略。
 
void setPathLimit (const std::string &path, const int &times, const int &secs)
 设置某个路径的额外限流规则(path 级)。
 
void setCloseFun (std::function< void(const int &fd)> closeFun)
 设置关闭tcp连接之后调用的函数
 
void setMaxPendingWriteBytes (const size_t bytes)
 设置每连接待发送数据高水位。
 
void setWriteBudgetPerEvent (const size_t bytes)
 设置 Reactor 单次处理一个连接的最大发送字节数。
 
void setMaxHttpHeaderBytes (const size_t bytes)
 设置 HTTP 请求和 WebSocket 握手头上限。
 
void setMaxPendingWorkerTasks (const size_t tasks)
 设置 WorkerPool 尚未开始执行的任务上限。
 
void setReactorMessageBudgets (const size_t workerCompletions, const size_t sendReadyNotifications)
 设置单次 Reactor 唤醒处理的跨线程消息预算。
 
void setSocketOptions (const ServerSocketOptions &options)
 设置新接收 TCP 连接的常用套接字参数。
 
void setGracefulShutdownTimeout (const size_t milliseconds)
 设置 close()/stopListen() 等待在途请求和发送队列排空的最长时间。
 
ServerMetricsSnapshot getMetrics () const noexcept
 获取服务器运行指标快照。
 
bool isListen ()
 返回对象的监听状态
 
int getListenPort () const noexcept
 获取当前实际监听端口。
 
SSL * getSSL (const int &fd)
 查询和服务端的连接,传入套接字,返回加密的SSL句柄
 
virtual ~TcpServer ()
 TcpServer 类的析构函数
 

Protected Types

enum class  WriteFlushResult {
  Drained , WaitWrite , WaitRead , Reschedule ,
  Error
}
 

Protected Member Functions

int enqueueWrite (const std::shared_ptr< ConnectionWriteState > &state, std::string data)
 
void requestQueuedClose (const std::shared_ptr< ConnectionWriteState > &state)
 
void requestCloseAfterFlush (const int &fd, const uint64_t expectedConnection=0)
 
void publishSendReady (const std::shared_ptr< ConnectionWriteState > &state)
 
void notifyReactor () noexcept
 
bool hasPendingReactorWork ()
 
void clearReactorQueues ()
 
void drainReactorWork (const int &epollFD)
 
size_t drainWorkerResults (const size_t budget)
 
size_t drainSendReady (const int &epollFD, const size_t budget)
 
void applyAcceptedSocketOptions (const int &acceptedFD) const noexcept
 
void reportReactorStartup (const bool success)
 
void advanceGracefulDrain ()
 
void prepareHandler (TcpFDHandler &handler, const int &fd)
 
void prepareQueuedHandler (TcpFDHandler &handler, const int &fd)
 
void prepareQueuedHandler (TcpFDHandler &handler, const int &fd, const uint64_t expectedConnection)
 
WriteFlushResult flushConnectionWrites (TcpFDInf &connection)
 
bool updateConnectionEvents (const int &epollFD, TcpFDInf &connection, const bool &wantWrite)
 
void handleSendReady (const int &epollFD, SendReadyMessage message)
 
void publishWorkerResult (WorkerMessage message)
 
void scheduleBufferedRead (const int &fd, const uint64_t connection)
 

Protected Attributes

system::MPSCQueue< WorkerMessagefinishQueue
 
system::MPSCQueue< SendReadyMessagesendReadyQueue
 
stt::system::WorkerPoolworkpool =nullptr
 
unsigned long buffer_size
 
unsigned long long maxFD
 
security::ConnectionLimiter connectionLimiter
 
std::unordered_map< int, TcpFDInfclientfd
 
std::atomic< bool > flag1 {false}
 
bool unblock
 
SSL_CTX * ctx =nullptr
 
bool TLS =false
 
std::mutex tlsContextMutex
 
bool security_open
 
std::atomic< int > workerEventFD {-1}
 
std::atomic< bool > workerWakePending {false}
 
std::recursive_mutex lifecycleMutex
 
std::thread reactorThread
 
std::mutex reactorStartupMutex
 
std::condition_variable reactorStartupCV
 
bool reactorStartupComplete =false
 
bool reactorStartupSuccess =false
 
std::atomic< bool > gracefulDrainRequested {false}
 
std::mutex gracefulShutdownMutex
 
std::condition_variable gracefulShutdownCV
 
std::mutex overflowFinishMutex
 
std::deque< WorkerMessageoverflowFinishQueue
 
std::mutex overflowSendReadyMutex
 
std::deque< SendReadyMessageoverflowSendReadyQueue
 
std::mutex writeRegistryMutex
 
std::unordered_map< int, std::weak_ptr< ConnectionWriteState > > writeRegistry
 
std::deque< SendReadyMessagebufferedReadQueue
 
std::deque< SendReadyMessagetimeoutCandidates
 
int serverType
 
int connectionSecs
 
int connectionTimes
 
int requestSecs
 
int requestTimes
 
int checkFrequency
 
uint64_t connection_obj_fd
 
size_t maxPendingWriteBytes =4UL*1024UL*1024UL
 
size_t writeBudgetPerEvent =256UL*1024UL
 
size_t maxHttpHeaderBytes =64UL*1024UL
 
size_t maxPendingWorkerTasks =65536
 
size_t workerCompletionBudgetPerWake =2048
 
size_t sendReadyBudgetPerWake =256
 
size_t gracefulShutdownTimeoutMs =5000
 
ServerSocketOptions socketOptions
 
std::atomic< uint64_t > metricAcceptedConnections {0}
 
std::atomic< uint64_t > metricActiveConnections {0}
 
std::atomic< uint64_t > metricClosedConnections {0}
 
std::atomic< uint64_t > metricRejectedConnections {0}
 
std::atomic< uint64_t > metricAcceptErrors {0}
 
std::atomic< uint64_t > metricTLSHandshakeFailures {0}
 
std::atomic< uint64_t > metricParsedHttpRequests {0}
 
std::atomic< uint64_t > metricQueuedWriteBytes {0}
 
std::atomic< uint64_t > metricSentBytes {0}
 
std::atomic< uint64_t > metricPendingWriteBytes {0}
 
std::atomic< uint64_t > metricPeakPendingWriteBytes {0}
 
std::atomic< uint64_t > metricPeakPendingWorkerTasks {0}
 
std::atomic< uint64_t > metricWriteOverflows {0}
 
std::atomic< uint64_t > metricWorkerQueueOverflows {0}
 
std::atomic< uint64_t > metricSendReadyQueueOverflows {0}
 
std::atomic< uint64_t > metricWorkerTaskRejections {0}
 
std::atomic< uint64_t > metricReactorWakeups {0}
 
std::atomic< uint64_t > metricReactorWakeupsCoalesced {0}
 
std::atomic< uint64_t > metricWriteSyscalls {0}
 
std::atomic< uint64_t > metricBatchedWriteSyscalls {0}
 
std::atomic< uint64_t > metricBatchedWriteBuffers {0}
 
std::atomic< uint64_t > metricIdleTimeoutChecks {0}
 
std::atomic< uint64_t > metricIdleTimeoutCloses {0}
 
std::atomic< uint64_t > metricGracefulShutdownTimeouts {0}
 

Detailed Description

Tcp服务端类

Note
默认底层实现是epoll边缘触发+套接字非阻塞模式

Member Enumeration Documentation

◆ WriteFlushResult

enum class stt::network::TcpServer::WriteFlushResult
strongprotected
Enumerator
Drained 
WaitWrite 
WaitRead 
Reschedule 
Error 

Constructor & Destructor Documentation

◆ TcpServer()

stt::network::TcpServer::TcpServer ( const unsigned long long & maxFD = 1000000,
const int & buffer_size = 256,
const size_t & finishQueue_cap = 65536,
const bool & security_open = true,
const int & connectionNumLimit = 20,
const int & connectionSecs = 1,
const int & connectionTimes = 6,
const int & requestSecs = 1,
const int & requestTimes = 40,
const int & checkFrequency = 60,
const int & connectionTimeout = 60 )
inline

构造函数,默认是允许最大1000000个连接,每个连接接收缓冲区最大为256kb,启用安全模块。

Note
打开安全模块会对性能有影响
Parameters
maxFD服务对象的最大接受连接数 默认为1000000
buffer_size同一个连接允许传输的最大数据量(单位为kb) 默认为256kb
finishQueue_capWorker 完成队列(Worker → Reactor)的容量,必须为 2 的幂。
Note
建议容量不小于“峰值完成速率 × Reactor 最坏暂停时间”;环形队列满时进入带锁后备队列。
Parameters
security_opentrue:开启安全模块 false:关闭安全模块 (默认为开启)
connectionNumLimit同一个ip连接数目的上限(默认20)
connectionSecs连接速率统计窗口长度(单位:秒)(默认1秒)
connectionTimes在 connectionSecs 秒内允许的最大连接次数 (默认6次)
requestSecs请求速率统计窗口长度(单位:秒)(默认1秒)
requestTimes在秒requestSecs内允许的最大请求数量(默认40次)
checkFrequency检查僵尸连接的频率(单位秒钟) -1为不做检查 (默认为60秒)
connectionTimeout连接多少秒内没有任何反应就视为僵尸连接 (单位为秒) -1为无限制 (默认60秒)

◆ ~TcpServer()

virtual stt::network::TcpServer::~TcpServer ( )
inlinevirtual

TcpServer 类的析构函数

Note
会调用close函数关闭

Member Function Documentation

◆ advanceGracefulDrain()

void stt::network::TcpServer::advanceGracefulDrain ( )
protected

◆ applyAcceptedSocketOptions()

void stt::network::TcpServer::applyAcceptedSocketOptions ( const int & acceptedFD) const
protectednoexcept

◆ clearReactorQueues()

void stt::network::TcpServer::clearReactorQueues ( )
protected

◆ close() [1/2]

virtual bool stt::network::TcpServer::close ( )
virtual

关闭监听和所有已连接的套接字

Note
关闭监听和所有已经连接的套接字,已经注册的回调函数和tls不会删除和redraw
会阻塞等待直到全部关闭完成
默认先按 setGracefulShutdownTimeout() 配置排空在途 Worker 与发送队列,再强制回收。
Returns
true:关闭成功 false:关闭失败

Reimplemented in stt::network::HttpServer, and stt::network::WebSocketServer.

◆ close() [2/2]

virtual bool stt::network::TcpServer::close ( const int & fd)
virtual

关闭某个套接字的连接

Parameters
fd需要关闭的套接字
Note
线程安全:服务运行期间从 Reactor 外调用时只提交关闭请求,实际 fd/TLS 释放仍由 Reactor 完成。
Returns
true:关闭成功 false:关闭失败

Reimplemented in stt::network::HttpServer, and stt::network::WebSocketServer.

◆ drainReactorWork()

void stt::network::TcpServer::drainReactorWork ( const int & epollFD)
protected

◆ drainSendReady()

size_t stt::network::TcpServer::drainSendReady ( const int & epollFD,
const size_t budget )
protected

◆ drainWorkerResults()

size_t stt::network::TcpServer::drainWorkerResults ( const size_t budget)
protected

◆ enqueueWrite()

int stt::network::TcpServer::enqueueWrite ( const std::shared_ptr< ConnectionWriteState > & state,
std::string data )
protected

◆ flushConnectionWrites()

WriteFlushResult stt::network::TcpServer::flushConnectionWrites ( TcpFDInf & connection)
protected

◆ getListenPort()

int stt::network::TcpServer::getListenPort ( ) const
inlinenoexcept

获取当前实际监听端口。

Returns
成功启动后返回实际端口;允许 startListen(0, ...) 由内核选择空闲端口。尚未启动时返回 -1。

◆ getMetrics()

ServerMetricsSnapshot stt::network::TcpServer::getMetrics ( ) const
inlinenoexcept

获取服务器运行指标快照。

Returns
包含连接、TLS、HTTP、发送队列及溢出计数的值对象。
Note
线程安全、无锁;累计计数从服务器对象构造后开始,不会因 stopListen() 清零。

◆ getSSL()

SSL * stt::network::TcpServer::getSSL ( const int & fd)

查询和服务端的连接,传入套接字,返回加密的SSL句柄

Warning
仅供诊断;服务运行期间不得在 Reactor 外调用 SSL_read/SSL_write/SSL_shutdown。 发送数据应使用 handler API,否则会破坏 TLS 会话的单线程所有权。
Returns
返回加密的SSL指针; 如果不存在此fd或者没有加密 返回nullptr

◆ handleSendReady()

void stt::network::TcpServer::handleSendReady ( const int & epollFD,
SendReadyMessage message )
protected

◆ hasPendingReactorWork()

bool stt::network::TcpServer::hasPendingReactorWork ( )
protected

◆ isListen()

bool stt::network::TcpServer::isListen ( )
inline

返回对象的监听状态

Returns
true:正在监听 false:没有在监听

◆ notifyReactor()

void stt::network::TcpServer::notifyReactor ( )
protectednoexcept

◆ prepareHandler()

void stt::network::TcpServer::prepareHandler ( TcpFDHandler & handler,
const int & fd )
protected

◆ prepareQueuedHandler() [1/2]

void stt::network::TcpServer::prepareQueuedHandler ( TcpFDHandler & handler,
const int & fd )
protected

◆ prepareQueuedHandler() [2/2]

void stt::network::TcpServer::prepareQueuedHandler ( TcpFDHandler & handler,
const int & fd,
const uint64_t expectedConnection )
protected

◆ publishSendReady()

void stt::network::TcpServer::publishSendReady ( const std::shared_ptr< ConnectionWriteState > & state)
protected

◆ publishWorkerResult()

void stt::network::TcpServer::publishWorkerResult ( WorkerMessage message)
protected

◆ putTask()

void stt::network::TcpServer::putTask ( const std::function< int(TcpFDHandler &k, TcpInformation &inf)> & fun,
TcpFDHandler & k,
TcpInformation & inf )

把一个任务放入工作线程池由工作线程完成

Note
应当把速度慢、会阻塞的io任务放入工作线程池
Warning
可执行对象必须严格按照规定的返回值返回
Parameters
fun放入工作线程池的可执行对象 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpFDInf &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:-2:处理失败并且需要关闭连接 -1:处理失败但不需要关闭连接 1:处理成功
k和客户端连接的套接字的操作对象的引用
inf客户端信息的引用,保存数据,处理进度,状态机信息等
Note
本函数仅应从该连接的 Reactor 回调中调用。过载拒绝会按失败完成消息关闭连接,并计入 worker_task_rejections。

◆ redrawTLS()

void stt::network::TcpServer::redrawTLS ( )

撤销TLS加密,ca证书等

◆ reportReactorStartup()

void stt::network::TcpServer::reportReactorStartup ( const bool success)
protected

◆ requestCloseAfterFlush()

void stt::network::TcpServer::requestCloseAfterFlush ( const int & fd,
const uint64_t expectedConnection = 0 )
protected

◆ requestQueuedClose()

void stt::network::TcpServer::requestQueuedClose ( const std::shared_ptr< ConnectionWriteState > & state)
protected

◆ scheduleBufferedRead()

void stt::network::TcpServer::scheduleBufferedRead ( const int & fd,
const uint64_t connection )
protected

Reactor 内延续解析已在用户态缓冲区中的 HTTP 流水线请求。

◆ setCloseFun()

void stt::network::TcpServer::setCloseFun ( std::function< void(const int &fd)> closeFun)
inline

设置关闭tcp连接之后调用的函数

◆ setConnectStrategy()

void stt::network::TcpServer::setConnectStrategy ( const stt::security::RateLimitType & type)
inline

设置“连接速率限流”所使用的策略。

Parameters
type策略类型,见 stt::security::RateLimitType 说明。
Note
不调用本函数时,默认策略为 stt::security::RateLimitType::Cooldown

◆ setFunction()

void stt::network::TcpServer::setFunction ( const std::string & key,
std::function< int(TcpFDHandler &k, TcpInformation &inf)> fc )
inline

设置key对应的收到客户端消息后的回调函数

Note
可以设置多个 ,框架会根据设置顺序依次执行回调函数;也可以设置扔入工作线程池处理的流程,注意设置不同的返回值即可。
Warning
可执行对象必须严格按照规定的返回值返回
Parameters
key找到对应回调函数的key
fc一个函数或函数对象,用于收到客户端消息后处理逻辑 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpFDInf &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:-2:处理失败并且需要关闭连接 -1:处理失败但不需要关闭连接 0:处理流程已经扔入工作线程池,需要等待处理完成 1:处理成功

◆ setGetKeyFunction()

void stt::network::TcpServer::setGetKeyFunction ( std::function< int(TcpFDHandler &k, TcpInformation &inf)> parseKeyFun)
inline

设置解析出key的回调函数

Note
根据传入的参数把key存入TcpInformation信息中的ctx哈希表。框架会根据key的值找到你注册的处理函数。
Warning
可执行对象必须严格按照规定的返回值返回
Parameters
parseKeyFun解析key的回调函数 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpFDInf &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:-2:处理失败并且需要关闭连接 -1:处理失败但不需要关闭连接 0:处理流程已经扔入工作线程池,需要等待处理完成 1:处理成功

◆ setGlobalSolveFunction()

void stt::network::TcpServer::setGlobalSolveFunction ( std::function< bool(TcpFDHandler &k, TcpInformation &inf)> fc)
inline

设置全局备用函数

Note
找不到对应回调函数的时候会调用全局备用函数
Parameters
fc一个函数或函数对象,用于收到客户端消息后处理逻辑 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpInformation &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:true:处理成功 false:处理失败 会关闭连接

◆ setGracefulShutdownTimeout()

void stt::network::TcpServer::setGracefulShutdownTimeout ( const size_t milliseconds)
inline

设置 close()/stopListen() 等待在途请求和发送队列排空的最长时间。

Parameters
milliseconds超时毫秒数;默认 5000。设置为 0 表示立即强制停止。
Note
超时后框架会丢弃未开始的 Worker 任务并强制关闭网络资源;已经运行的用户任务仍必须自行返回。 超时次数可从 getMetrics() 获取。

◆ setMaxHttpHeaderBytes()

void stt::network::TcpServer::setMaxHttpHeaderBytes ( const size_t bytes)
inline

设置 HTTP 请求和 WebSocket 握手头上限。

Parameters
bytes最大请求头字节数,最小接受值为 1024;默认 64 KiB。
Note
应在 startListen() 前设置,实际值还受服务器总接收缓冲上限约束。

◆ setMaxPendingWorkerTasks()

void stt::network::TcpServer::setMaxPendingWorkerTasks ( const size_t tasks)
inline

设置 WorkerPool 尚未开始执行的任务上限。

Parameters
tasks最大排队任务数,必须大于 0;默认 65536。
Note
应在 startListen() 前设置。达到上限时新任务会被拒绝并按失败结果返回 Reactor,避免突发流量耗尽内存。

◆ setMaxPendingWriteBytes()

void stt::network::TcpServer::setMaxPendingWriteBytes ( const size_t bytes)
inline

设置每连接待发送数据高水位。

Parameters
bytes最大待发送字节数,必须大于 0;默认 4 MiB。
Note
应在 startListen() 前设置。超过后发送返回 -101,并请求关闭慢客户端,防止无界内存增长。

◆ setPathLimit()

void stt::network::TcpServer::setPathLimit ( const std::string & path,
const int & times,
const int & secs )
inline

设置某个路径的额外限流规则(path 级)。

Note
这个path和parseKeyFun解析出来的key是一个东西
Parameters
path需要额外限流的路径,例如 "/login"、"/register"。
times在 secs 秒内允许的最大请求次数。
secs统计窗口长度(秒)。
Note
setPathLimit 配置的是 额外规则:
  • allowRequest 调用时传入的 (times, secs) 仍然会作为 IP 级规则先执行;
  • 若 path 命中此配置,则再执行 path 级规则;
  • 两者为 AND 关系:任何一层失败即拒绝。

◆ setPathStrategy()

void stt::network::TcpServer::setPathStrategy ( const stt::security::RateLimitType & type)
inline

设置“path 级请求限流”所使用的策略。

Parameters
type策略类型,见 stt::security::RateLimitType 说明。
Note
不调用本函数时,默认策略为 stt::security::RateLimitType::SlidingWindow
这个path和parseKeyFun解析出来的key是一个东西

◆ setReactorMessageBudgets()

void stt::network::TcpServer::setReactorMessageBudgets ( const size_t workerCompletions,
const size_t sendReadyNotifications )
inline

设置单次 Reactor 唤醒处理的跨线程消息预算。

Parameters
workerCompletions单次最多处理的 Worker 完成消息数。
sendReadyNotifications单次最多处理的待发送连接通知数。
Note
两个值必须大于 0;默认分别为 2048 和 256。限制预算可防止完成队列在突发流量下长期饿死网络事件。

◆ setRequestStrategy()

void stt::network::TcpServer::setRequestStrategy ( const stt::security::RateLimitType & type)
inline

设置“IP 级请求限流”所使用的策略。

Parameters
type策略类型,见 stt::security::RateLimitType 说明。
Note
不调用本函数时,默认策略为 stt::security::RateLimitType::SlidingWindow

◆ setSecuritySendBackFun()

void stt::network::TcpServer::setSecuritySendBackFun ( std::function< void(TcpFDHandler &k, TcpInformation &inf)> fc)
inline

设置违反信息安全策略时候的返回函数

Note
违反信息安全策略时候的返回函数,调用完就关闭连接
Parameters
fc一个函数或函数对象,用于收到客户端消息后处理逻辑 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpInformation &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:true:处理成功 false:处理失败 会关闭连接

◆ setSocketOptions()

void stt::network::TcpServer::setSocketOptions ( const ServerSocketOptions & options)
inline

设置新接收 TCP 连接的常用套接字参数。

Parameters
optionsTCP_NODELAY、keepalive、收发缓冲、deferred accept、Fast Open 及 backlog 配置。
Note
应在 startListen() 前设置;无效的缓冲区值会按 0(系统默认)处理。

◆ setTLS() [1/3]

bool stt::network::TcpServer::setTLS ( const char * cert,
const char * key,
const char * passwd,
const char * ca )

以兼容模式启用双向 TLS(mTLS)。

Parameters
cert服务器证书链 PEM 文件。
key与证书匹配的 PEM 私钥。
passwd私钥密码;未加密时可传空字符串。
ca用于验证客户端证书的 CA PEM 文件。
Returns
配置加载成功返回 true。
Note
保留四参数版本的历史语义:客户端必须提供有效证书。最低协议版本为 TLS 1.2。 可在运行时安全重载;新上下文只影响后续连接,现有 TLS 会话继续使用原上下文。

◆ setTLS() [2/3]

bool stt::network::TcpServer::setTLS ( const char * cert,
const char * key,
const char * passwd,
const char * ca,
TLSClientAuthMode clientAuth )

启用 TLS 并显式选择客户端证书校验模式。

Parameters
cert服务器证书链 PEM 文件。
key与证书匹配的 PEM 私钥。
passwd私钥密码;未加密时可为空。
ca客户端证书 CA;Optional/Required 模式必须提供。
clientAuth客户端证书校验模式。
Returns
配置加载成功返回 true。

◆ setTLS() [3/3]

bool stt::network::TcpServer::setTLS ( const char * cert,
const char * key,
const char * passwd = "" )

启用普通单向 TLS,适用于常见 HTTPS/WSS 服务。

Parameters
cert服务器证书链 PEM 文件。
key与证书匹配的 PEM 私钥。
passwd私钥密码;默认无密码。
Returns
配置加载成功返回 true。

◆ setWriteBudgetPerEvent()

void stt::network::TcpServer::setWriteBudgetPerEvent ( const size_t bytes)
inline

设置 Reactor 单次处理一个连接的最大发送字节数。

Parameters
bytes单次预算,必须大于 0;默认 256 KiB。
Note
应在 startListen() 前设置,用于限制大响应独占 Reactor,改善连接间公平性。

◆ startListen()

bool stt::network::TcpServer::startListen ( const int & port,
const int & threads = 8 )

打开Tcp服务器监听程序

Parameters
port监听的端口
threads消费者线程的数量 (默认为8)
Returns
true:打开监听程序成功 false:打开监听程序失败

◆ stopListen()

bool stt::network::TcpServer::stopListen ( )

停止监听

Warning
仅停止监听(但是套接字也已经无法接收了,它依赖于监听和消费者,所以这个函数没什么意义)
不要在 Reactor 同步回调中调用服务级 stopListen()/close();应通知控制线程执行。连接级关闭请用 handler.close()。
Returns
true:停止成功 false:停止失败

◆ updateConnectionEvents()

bool stt::network::TcpServer::updateConnectionEvents ( const int & epollFD,
TcpFDInf & connection,
const bool & wantWrite )
protected

Member Data Documentation

◆ buffer_size

unsigned long stt::network::TcpServer::buffer_size
protected

◆ bufferedReadQueue

std::deque<SendReadyMessage> stt::network::TcpServer::bufferedReadQueue
protected

◆ checkFrequency

int stt::network::TcpServer::checkFrequency
protected

◆ clientfd

std::unordered_map<int,TcpFDInf> stt::network::TcpServer::clientfd
protected

◆ connection_obj_fd

uint64_t stt::network::TcpServer::connection_obj_fd
protected

◆ connectionLimiter

security::ConnectionLimiter stt::network::TcpServer::connectionLimiter
protected

◆ connectionSecs

int stt::network::TcpServer::connectionSecs
protected

◆ connectionTimes

int stt::network::TcpServer::connectionTimes
protected

◆ ctx

SSL_CTX* stt::network::TcpServer::ctx =nullptr
protected

◆ finishQueue

system::MPSCQueue<WorkerMessage> stt::network::TcpServer::finishQueue
protected

◆ flag1

std::atomic<bool> stt::network::TcpServer::flag1 {false}
protected

◆ gracefulDrainRequested

std::atomic<bool> stt::network::TcpServer::gracefulDrainRequested {false}
protected

◆ gracefulShutdownCV

std::condition_variable stt::network::TcpServer::gracefulShutdownCV
protected

◆ gracefulShutdownMutex

std::mutex stt::network::TcpServer::gracefulShutdownMutex
protected

◆ gracefulShutdownTimeoutMs

size_t stt::network::TcpServer::gracefulShutdownTimeoutMs =5000
protected

◆ lifecycleMutex

std::recursive_mutex stt::network::TcpServer::lifecycleMutex
protected

◆ maxFD

unsigned long long stt::network::TcpServer::maxFD
protected

◆ maxHttpHeaderBytes

size_t stt::network::TcpServer::maxHttpHeaderBytes =64UL*1024UL
protected

◆ maxPendingWorkerTasks

size_t stt::network::TcpServer::maxPendingWorkerTasks =65536
protected

◆ maxPendingWriteBytes

size_t stt::network::TcpServer::maxPendingWriteBytes =4UL*1024UL*1024UL
protected

◆ metricAcceptedConnections

std::atomic<uint64_t> stt::network::TcpServer::metricAcceptedConnections {0}
protected

◆ metricAcceptErrors

std::atomic<uint64_t> stt::network::TcpServer::metricAcceptErrors {0}
protected

◆ metricActiveConnections

std::atomic<uint64_t> stt::network::TcpServer::metricActiveConnections {0}
protected

◆ metricBatchedWriteBuffers

std::atomic<uint64_t> stt::network::TcpServer::metricBatchedWriteBuffers {0}
protected

◆ metricBatchedWriteSyscalls

std::atomic<uint64_t> stt::network::TcpServer::metricBatchedWriteSyscalls {0}
protected

◆ metricClosedConnections

std::atomic<uint64_t> stt::network::TcpServer::metricClosedConnections {0}
protected

◆ metricGracefulShutdownTimeouts

std::atomic<uint64_t> stt::network::TcpServer::metricGracefulShutdownTimeouts {0}
protected

◆ metricIdleTimeoutChecks

std::atomic<uint64_t> stt::network::TcpServer::metricIdleTimeoutChecks {0}
protected

◆ metricIdleTimeoutCloses

std::atomic<uint64_t> stt::network::TcpServer::metricIdleTimeoutCloses {0}
protected

◆ metricParsedHttpRequests

std::atomic<uint64_t> stt::network::TcpServer::metricParsedHttpRequests {0}
protected

◆ metricPeakPendingWorkerTasks

std::atomic<uint64_t> stt::network::TcpServer::metricPeakPendingWorkerTasks {0}
protected

◆ metricPeakPendingWriteBytes

std::atomic<uint64_t> stt::network::TcpServer::metricPeakPendingWriteBytes {0}
protected

◆ metricPendingWriteBytes

std::atomic<uint64_t> stt::network::TcpServer::metricPendingWriteBytes {0}
protected

◆ metricQueuedWriteBytes

std::atomic<uint64_t> stt::network::TcpServer::metricQueuedWriteBytes {0}
protected

◆ metricReactorWakeups

std::atomic<uint64_t> stt::network::TcpServer::metricReactorWakeups {0}
protected

◆ metricReactorWakeupsCoalesced

std::atomic<uint64_t> stt::network::TcpServer::metricReactorWakeupsCoalesced {0}
protected

◆ metricRejectedConnections

std::atomic<uint64_t> stt::network::TcpServer::metricRejectedConnections {0}
protected

◆ metricSendReadyQueueOverflows

std::atomic<uint64_t> stt::network::TcpServer::metricSendReadyQueueOverflows {0}
protected

◆ metricSentBytes

std::atomic<uint64_t> stt::network::TcpServer::metricSentBytes {0}
protected

◆ metricTLSHandshakeFailures

std::atomic<uint64_t> stt::network::TcpServer::metricTLSHandshakeFailures {0}
protected

◆ metricWorkerQueueOverflows

std::atomic<uint64_t> stt::network::TcpServer::metricWorkerQueueOverflows {0}
protected

◆ metricWorkerTaskRejections

std::atomic<uint64_t> stt::network::TcpServer::metricWorkerTaskRejections {0}
protected

◆ metricWriteOverflows

std::atomic<uint64_t> stt::network::TcpServer::metricWriteOverflows {0}
protected

◆ metricWriteSyscalls

std::atomic<uint64_t> stt::network::TcpServer::metricWriteSyscalls {0}
protected

◆ overflowFinishMutex

std::mutex stt::network::TcpServer::overflowFinishMutex
protected

◆ overflowFinishQueue

std::deque<WorkerMessage> stt::network::TcpServer::overflowFinishQueue
protected

◆ overflowSendReadyMutex

std::mutex stt::network::TcpServer::overflowSendReadyMutex
protected

◆ overflowSendReadyQueue

std::deque<SendReadyMessage> stt::network::TcpServer::overflowSendReadyQueue
protected

◆ reactorStartupComplete

bool stt::network::TcpServer::reactorStartupComplete =false
protected

◆ reactorStartupCV

std::condition_variable stt::network::TcpServer::reactorStartupCV
protected

◆ reactorStartupMutex

std::mutex stt::network::TcpServer::reactorStartupMutex
protected

◆ reactorStartupSuccess

bool stt::network::TcpServer::reactorStartupSuccess =false
protected

◆ reactorThread

std::thread stt::network::TcpServer::reactorThread
protected

◆ requestSecs

int stt::network::TcpServer::requestSecs
protected

◆ requestTimes

int stt::network::TcpServer::requestTimes
protected

◆ security_open

bool stt::network::TcpServer::security_open
protected

◆ sendReadyBudgetPerWake

size_t stt::network::TcpServer::sendReadyBudgetPerWake =256
protected

◆ sendReadyQueue

system::MPSCQueue<SendReadyMessage> stt::network::TcpServer::sendReadyQueue
protected

◆ serverType

int stt::network::TcpServer::serverType
protected

◆ socketOptions

ServerSocketOptions stt::network::TcpServer::socketOptions
protected

◆ timeoutCandidates

std::deque<SendReadyMessage> stt::network::TcpServer::timeoutCandidates
protected

◆ TLS

bool stt::network::TcpServer::TLS =false
protected

◆ tlsContextMutex

std::mutex stt::network::TcpServer::tlsContextMutex
mutableprotected

◆ unblock

bool stt::network::TcpServer::unblock
protected

◆ workerCompletionBudgetPerWake

size_t stt::network::TcpServer::workerCompletionBudgetPerWake =2048
protected

◆ workerEventFD

std::atomic<int> stt::network::TcpServer::workerEventFD {-1}
protected

◆ workerWakePending

std::atomic<bool> stt::network::TcpServer::workerWakePending {false}
protected

◆ workpool

stt::system::WorkerPool* stt::network::TcpServer::workpool =nullptr
protected

◆ writeBudgetPerEvent

size_t stt::network::TcpServer::writeBudgetPerEvent =256UL*1024UL
protected

◆ writeRegistry

std::unordered_map<int,std::weak_ptr<ConnectionWriteState> > stt::network::TcpServer::writeRegistry
protected

◆ writeRegistryMutex

std::mutex stt::network::TcpServer::writeRegistryMutex
protected

The documentation for this class was generated from the following file: