STTNet
 全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 宏定义 
Public 成员函数 | Protected 属性 | 所有成员列表
stt::network::TcpServer类 参考abstract

Tcp服务端类 更多...

#include <sttnet.h>

类 stt::network::TcpServer 继承关系图:
stt::network::HttpServer stt::network::WebSocketServer

Public 成员函数

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 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 加密并配置服务器端证书与密钥 更多...
 
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 ()
 停止监听 更多...
 
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连接之后调用的函数 更多...
 
bool isListen ()
 返回对象的监听状态 更多...
 
SSL * getSSL (const int &fd)
 查询和服务端的连接,传入套接字,返回加密的SSL句柄 更多...
 
 ~TcpServer ()
 TcpServer 类的析构函数 更多...
 

Protected 属性

std::queue< WorkerMessagefinishQueue
 
stt::system::WorkerPoolworkpool
 
unsigned long buffer_size
 
unsigned long long maxFD
 
security::ConnectionLimiter connectionLimiter
 
TcpFDInfclientfd
 
int flag1 =true
 
bool unblock
 
SSL_CTX * ctx =nullptr
 
bool TLS =false
 
bool security_open
 
int workerEventFD
 
int serverType
 
int connectionSecs
 
int connectionTimes
 
int requestSecs
 
int requestTimes
 
int checkFrequency
 

详细描述

Tcp服务端类

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

构造及析构函数说明

stt::network::TcpServer::TcpServer ( const unsigned long long &  maxFD = 1000000,
const int &  buffer_size = 256,
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,启用安全模块。

注解
打开安全模块会对性能有影响
参数
maxFD服务对象的最大接受连接数 默认为1000000
buffer_size同一个连接允许传输的最大数据量(单位为kb) 默认为256kb
security_opentrue:开启安全模块 false:关闭安全模块 (默认为开启)
connectionNumLimit同一个ip连接数目的上限(默认20)
connectionSecs连接速率统计窗口长度(单位:秒)(默认1秒)
connectionTimes在 connectionSecs 秒内允许的最大连接次数 (默认6次)
requestSecs请求速率统计窗口长度(单位:秒)(默认1秒)
requestTimes在秒requestSecs内允许的最大请求数量(默认40次)
checkFrequency检查僵尸连接的频率(单位秒钟) -1为不做检查 (默认为60秒)
connectionTimeout连接多少秒内没有任何反应就视为僵尸连接 (单位为秒) -1为无限制 (默认60秒)
stt::network::TcpServer::~TcpServer ( )
inline

TcpServer 类的析构函数

注解
会调用close函数关闭

成员函数说明

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

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

注解
关闭监听和所有已经连接的套接字,已经注册的回调函数和tls不会删除和redraw
会阻塞等待直到全部关闭完成
返回
true:关闭成功 false:关闭失败
virtual bool stt::network::TcpServer::close ( const int &  fd)
virtual

关闭某个套接字的连接

参数
fd需要关闭的套接字
返回
true:关闭成功 false:关闭失败

stt::network::WebSocketServer 重载.

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

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

返回
返回加密的SSL指针; 如果不存在此fd或者没有加密 返回nullptr
bool stt::network::TcpServer::isListen ( )
inline

返回对象的监听状态

返回
true:正在监听 false:没有在监听
void stt::network::TcpServer::putTask ( const std::function< int(TcpFDHandler &k, TcpInformation &inf)> &  fun,
TcpFDHandler k,
TcpInformation inf 
)

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

注解
应当把速度慢、会阻塞的io任务放入工作线程池
警告
可执行对象必须严格按照规定的返回值返回
参数
fun放入工作线程池的可执行对象 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpFDInf &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:-2:处理失败并且需要关闭连接 -1:处理失败但不需要关闭连接 1:处理成功
k和客户端连接的套接字的操作对象的引用
inf客户端信息的引用,保存数据,处理进度,状态机信息等
void stt::network::TcpServer::redrawTLS ( )

撤销TLS加密,ca证书等

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

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

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

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

参数
type策略类型,见 RateLimitType 说明。
注解
不调用本函数时,默认策略为 RateLimitType::Cooldown 。
void stt::network::TcpServer::setFunction ( const std::string &  key,
std::function< int(TcpFDHandler &k, TcpInformation &inf)>  fc 
)
inline

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

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

设置解析出key的回调函数

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

设置全局备用函数

注解
找不到对应回调函数的时候会调用全局备用函数
参数
key找到对应回调函数的key
fc一个函数或函数对象,用于收到客户端消息后处理逻辑 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpInformation &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:true:处理成功 false:处理失败 会关闭连接
void stt::network::TcpServer::setPathLimit ( const std::string &  path,
const int &  times,
const int &  secs 
)
inline

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

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

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

参数
type策略类型,见 RateLimitType 说明。
注解
不调用本函数时,默认策略为 RateLimitType::SlidingWindow 。
这个path和parseKeyFun解析出来的key是一个东西
void stt::network::TcpServer::setRequestStrategy ( const stt::security::RateLimitType type)
inline

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

参数
type策略类型,见 RateLimitType 说明。
注解
不调用本函数时,默认策略为 RateLimitType::SlidingWindow 。
void stt::network::TcpServer::setSecuritySendBackFun ( std::function< void(TcpFDHandler &k, TcpInformation &inf)>  fc)
inline

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

注解
违反信息安全策略时候的返回函数,调用完就关闭连接
参数
key找到对应回调函数的key
fc一个函数或函数对象,用于收到客户端消息后处理逻辑 -参数:TcpFDHandler &k - 和客户端连接的套接字的操作对象的引用 TcpInformation &inf - 客户端信息,保存数据,处理进度,状态机信息等 -返回值:true:处理成功 false:处理失败 会关闭连接
bool stt::network::TcpServer::setTLS ( const char *  cert,
const char *  key,
const char *  passwd,
const char *  ca 
)

启用 TLS 加密并配置服务器端证书与密钥

本函数用于初始化 OpenSSL,并为 TCP 服务器启用 TLS(SSL/TLSv1 协议族)支持。 它加载服务器端证书、私钥和可选的 CA 根证书,用于实现对等验证。

若已启用 TLS,将自动重建(重载)上下文。

参数
cacert服务器端证书链文件路径(通常为 PEM 格式,包括中间证书)
key私钥文件路径(与证书匹配的 PEM 格式密钥)
passwd私钥文件的密码(若密钥加密,可为空字符串)
caCA 根证书路径,用于验证客户端证书(PEM 格式)
注解
使用的协议方法为 SSLv23_method(),实际上支持 SSLv3/TLSv1/TLSv1.1/TLSv1.2 及更高版本(具体取决于 OpenSSL 版本与配置)
校验证书策略使用 SSL_VERIFY_FAIL_IF_NO_PEER_CERT,即:
  • 若客户端未提供证书,则握手失败(更安全,推荐)
  • 若证书无效或校验失败,也会终止握手
返回
true 启用 TLS 成功,服务器已进入加密状态
false 启用失败(日志将输出具体错误)
警告
启用 TLS 后,所有接入连接必须遵循 TLS 握手流程,否则通信失败
参见
redrawTLS() 若已有 TLS 上下文存在,会先释放并重建(可用于热更新证书)
bool stt::network::TcpServer::startListen ( const int &  port,
const int &  threads = 8 
)

打开Tcp服务器监听程序

参数
port监听的端口
threads消费者线程的数量 (默认为8)
返回
true:打开监听程序成功 false:打开监听程序失败
bool stt::network::TcpServer::stopListen ( )

停止监听

警告
仅停止监听(但是套接字也已经无法接收了,它依赖于监听和消费者,所以这个函数没什么意义)
返回
true:停止成功 false:停止失败

类成员变量说明

unsigned long stt::network::TcpServer::buffer_size
protected
int stt::network::TcpServer::checkFrequency
protected
TcpFDInf* stt::network::TcpServer::clientfd
protected
security::ConnectionLimiter stt::network::TcpServer::connectionLimiter
protected
int stt::network::TcpServer::connectionSecs
protected
int stt::network::TcpServer::connectionTimes
protected
SSL_CTX* stt::network::TcpServer::ctx =nullptr
protected
std::queue<WorkerMessage> stt::network::TcpServer::finishQueue
protected
int stt::network::TcpServer::flag1 =true
protected
unsigned long long stt::network::TcpServer::maxFD
protected
int stt::network::TcpServer::requestSecs
protected
int stt::network::TcpServer::requestTimes
protected
bool stt::network::TcpServer::security_open
protected
int stt::network::TcpServer::serverType
protected
bool stt::network::TcpServer::TLS =false
protected
bool stt::network::TcpServer::unblock
protected
int stt::network::TcpServer::workerEventFD
protected
stt::system::WorkerPool* stt::network::TcpServer::workpool
protected

该类的文档由以下文件生成: