ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::ntcp Class Reference

TCP传输门面类。 More...

#include <ntcp.h>

Public Member Functions

bpoolpool ()
 获取共享的出站pack池。
bool init (i16_port aport, i32_threadsize asocketthreadnum, bool aouternet)
 初始化TCP服务端/客户端服务。
bool init (const net_listen_endpoint &alisten, i32_threadsize asocketthreadnum, bool aouternet)
i16_port port ()
 获取绑定的监听端口。
void close (i32_sessionid asession)
 关闭会话并通知actor级连接处理器。
void close_net (i32_sessionid asession)
 关闭会话但不触发actor级通知。
void set_close (int asession, const std::string &aip, i16_port aport, const std::function< void(i32_sessionid)> &afun)
 为会话注册自动重连行为。
const std::string & ip (const net_works &anets)
 选择合适的IP地址。
bool connect (const std::string &aip, i16_port aport, const std::function< void(i32_sessionid)> &afun)
 发起异步连接请求。
bool connect (const std::string &aip, i16_port aport, const std::function< void(i32_sessionid)> &afun, bool await, bool areconnection)
 发起异步连接请求(带阻塞等待和重连选项)。
bool connect (i32_serverid aserverid, const std::function< void(i32_session)> &afun, bool await, bool areconnection)
 连接到已配置的服务器。
bool connect_pool (i32_serverid aserverid, const std::function< void(i32_session)> &afun, bool await, bool areconnection)
 建立到指定服务器的额外连接。
bool send_msg (i32_sessionid asession, const std::string &amsg)
 通过TCP发送原始文本消息。
bool send_pack (i32_sessionid asession, std::shared_ptr< pack > &lpack)
 发送一个已构建的类型化数据包。
bool send_pack (i32_sessionid asession, std::shared_ptr< void > &lpack)
 发送类型擦除的数据包。
bool send_server (i32_serverid aserverid, std::shared_ptr< pack > &apack)
 向指定服务器发送数据包。
template<typename Y, typename T = Y>
bool send (i32_sessionid asession, const Y &adata, i64_actorid aactorid, i64_actorid arequestactorid)
 序列化并发送类型化载荷到单个会话。
template<typename Y, typename T = Y>
bool send (const std::map< i32_sessionid, i64_actorid > &asession, const Y &adata, i64_actorid aactorid)
 向多个会话广播类型化载荷。
template<typename Y, typename T = Y>
bool send (const std::set< i32_sessionid > &asession, const Y &adata, i64_actorid aactorid, i64_actorid arequestactorid)
 向多个会话广播类型化载荷(带请求Actor ID)。
template<typename Y, typename T = Y>
bool send_server (i32_serverid aserverid, const Y &adata, i64_actorid aactorid, i64_actorid arequestactorid)
 先解析服务器会话,再序列化并发送载荷。
template<typename Y, typename T = Y>
bool send_server (const std::set< i32_serverid > &aserverids, const Y &adata, i64_actorid aactorid, i64_actorid arequestactorid)
 向多个服务器广播类型化载荷。
bool send (const std::map< i32_sessionid, i64_actorid > &asession, i64_actorid aactorid, std::shared_ptr< pack > &apack)
 将已构建的pack广播到多个会话。
bool send (const std::set< i32_sessionid > &asession, i64_actorid aactorid, i64_actorid arequestactorid, std::shared_ptr< pack > &apack)
 将已构建的pack广播到多个会话(带请求Actor ID)。
template<typename T>
bool send_client (i32_actordataid auid, i16_area aarea, i32_gatewayid agateway, T &adata)
 发送forward_g2c包装器到单个网关。
template<typename T>
bool send_client (const std::vector< std::pair< i32_actordataid, i16_area > > &avec, i32_gatewayid agateway, T &adata)
 发送forward_g2c包装器到网关/用户批次。

Static Public Member Functions

static ntcpinstance ()
 获取TCP单例服务实例。

Detailed Description

TCP传输门面类。

作为TCP网络层的统一管理类,提供完整的TCP服务器和客户端功能。 主要职责包括:

  • 管理TCP服务器实例和监听端口
  • 处理客户端连接的建立和维护
  • 提供消息的序列化和发送功能
  • 与Actor框架集成,支持Actor间通信
  • 管理网络会话的生命周期
Note
该类采用单例模式,通过instance()方法获取全局唯一实例。
支持内网和公网两种网络模式,通过初始化参数控制。

Member Function Documentation

◆ close()

void ngl::ntcp::close ( i32_sessionid asession)

关闭会话并通知actor级连接处理器。

关闭指定的网络会话,并触发上层Actor框架的连接关闭处理逻辑。

Parameters
asession要关闭的会话ID

◆ close_net()

void ngl::ntcp::close_net ( i32_sessionid asession)

关闭会话但不触发actor级通知。

仅关闭网络层面的会话,不触发上层Actor框架的处理逻辑。 适用于需要静默关闭连接的场景。

Parameters
asession要关闭的会话ID

◆ connect() [1/3]

bool ngl::ntcp::connect ( const std::string & aip,
i16_port aport,
const std::function< void(i32_sessionid)> & afun )

发起异步连接请求。

向指定的IP地址和端口发起异步TCP连接请求。

Parameters
aip目标IP地址
aport目标端口号
afun连接成功后的回调函数
Returns
仅当传输层接受了请求时返回true,不代表连接已建立

◆ connect() [2/3]

bool ngl::ntcp::connect ( const std::string & aip,
i16_port aport,
const std::function< void(i32_sessionid)> & afun,
bool await,
bool areconnection )

发起异步连接请求(带阻塞等待和重连选项)。

向指定的IP地址和端口发起异步TCP连接请求,支持阻塞等待和自动重连。

Parameters
aip目标IP地址
aport目标端口号
afun连接成功后的回调函数
await是否阻塞等待连接建立
areconnection连接断开后是否自动重连
Returns
异步连接是否成功发起,不代表远端是否最终接受了连接

◆ connect() [3/3]

bool ngl::ntcp::connect ( i32_serverid aserverid,
const std::function< void(i32_session)> & afun,
bool await,
bool areconnection )

连接到已配置的服务器。

解析一个已配置的服务器ID并连接到其公布的地址。

Parameters
aserverid目标服务器ID
afun连接成功后的回调函数
await是否阻塞等待连接建立
areconnection连接断开后是否自动重连
Returns
连接是否成功发起

◆ connect_pool()

bool ngl::ntcp::connect_pool ( i32_serverid aserverid,
const std::function< void(i32_session)> & afun,
bool await,
bool areconnection )

建立到指定服务器的额外连接。

不检查已有会话,直接建立新的连接。用于多连接池场景。

Parameters
aserverid目标服务器ID
afun连接成功后的回调函数
await是否阻塞等待连接建立
areconnection连接断开后是否自动重连
Returns
连接是否成功发起

◆ init()

bool ngl::ntcp::init ( i16_port aport,
i32_threadsize asocketthreadnum,
bool aouternet )

初始化TCP服务端/客户端服务。

根据参数启动TCP服务器或客户端服务,配置监听端口和网络参数。

Parameters
aport监听端口号
asocketthreadnumsocket工作线程数量
aouternet是否允许公网客户端连接
Returns
初始化成功返回true,否则返回false

◆ instance()

ntcp & ngl::ntcp::instance ( )
inlinestatic

获取TCP单例服务实例。

actor/网络层使用的TCP单例服务,确保全局只有一个TCP管理器实例。

Returns
ntcp类的全局唯一实例引用

◆ ip()

const std::string & ngl::ntcp::ip ( const net_works & anets)

选择合适的IP地址。

根据节点类型选择IP地址:机器人节点选择公网IP,否则选择内网IP。

Parameters
anets网络地址信息列表
Returns
选择的IP地址字符串引用

◆ pool()

bpool & ngl::ntcp::pool ( )

获取共享的出站pack池。

提供对pack内存池的访问,用于高效分配和释放网络数据包内存。

Returns
pack内存池的引用

◆ port()

i16_port ngl::ntcp::port ( )

获取绑定的监听端口。

Returns
当前绑定的监听端口号

◆ send() [1/5]

template<typename Y, typename T>
bool ngl::ntcp::send ( const std::map< i32_sessionid, i64_actorid > & asession,
const Y & adata,
i64_actorid aactorid )

向多个会话广播类型化载荷。

向多个会话广播类型化载荷的实现。

Template Parameters
Y要发送的数据类型
T网络传输类型,默认为Y
Parameters
asession目标会话ID和Actor ID的映射
adata要发送的数据
aactorid发送方Actor ID
Returns
发送成功返回true,否则返回false

◆ send() [2/5]

bool ngl::ntcp::send ( const std::map< i32_sessionid, i64_actorid > & asession,
i64_actorid aactorid,
std::shared_ptr< pack > & apack )

将已构建的pack广播到多个会话。

Parameters
asession目标会话ID和Actor ID的映射
aactorid发送方Actor ID
apack要广播的数据包
Returns
发送成功返回true,否则返回false

◆ send() [3/5]

template<typename Y, typename T>
bool ngl::ntcp::send ( const std::set< i32_sessionid > & asession,
const Y & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )

向多个会话广播类型化载荷(带请求Actor ID)。

向多个会话广播类型化载荷(带请求Actor ID)的实现。

Template Parameters
Y要发送的数据类型
T网络传输类型,默认为Y
Parameters
asession目标会话ID集合
adata要发送的数据
aactorid发送方Actor ID
arequestactorid请求方Actor ID
Returns
发送成功返回true,否则返回false

◆ send() [4/5]

bool ngl::ntcp::send ( const std::set< i32_sessionid > & asession,
i64_actorid aactorid,
i64_actorid arequestactorid,
std::shared_ptr< pack > & apack )

将已构建的pack广播到多个会话(带请求Actor ID)。

Parameters
asession目标会话ID集合
aactorid发送方Actor ID
arequestactorid请求方Actor ID
apack要广播的数据包
Returns
发送成功返回true,否则返回false

◆ send() [5/5]

template<typename Y, typename T>
bool ngl::ntcp::send ( i32_sessionid asession,
const Y & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )

序列化并发送类型化载荷到单个会话。

序列化并发送类型化载荷到单个会话的实现。

Template Parameters
Y要发送的数据类型
T网络传输类型,默认为Y
Parameters
asession目标会话ID
adata要发送的数据
aactorid发送方Actor ID
arequestactorid请求方Actor ID
Returns
发送成功返回true,否则返回false

◆ send_client() [1/2]

template<typename T>
bool ngl::ntcp::send_client ( const std::vector< std::pair< i32_actordataid, i16_area > > & avec,
i32_gatewayid agateway,
T & adata )

发送forward_g2c包装器到网关/用户批次。

将一个载荷包装为网关转发包,并扇出到负责目标用户的网关会话。

Template Parameters
T覾要发送的数据类型
Parameters
avec目标用户ID和区域ID的列表
agateway目标网关服务器ID
adata要发送的数据
Returns
发送成功返回true,否则返回false
Template Parameters
T要发送的数据类型
Parameters
avec目标用户ID和区域ID的列表
agateway目标网关服务器ID
adata要发送的数据
Returns
发送成功返回true,否则返回false

◆ send_client() [2/2]

template<typename T>
bool ngl::ntcp::send_client ( i32_actordataid auid,
i16_area aarea,
i32_gatewayid agateway,
T & adata )

发送forward_g2c包装器到单个网关。

发送forward_g2c包装器到单个网关的实现。

Template Parameters
T要发送的数据类型
Parameters
auid目标用户ID
aarea目标区域ID
agateway目标网关服务器ID
adata要发送的数据
Returns
发送成功返回true,否则返回false

◆ send_msg()

bool ngl::ntcp::send_msg ( i32_sessionid asession,
const std::string & amsg )

通过TCP发送原始文本消息。

Parameters
asession目标会话ID
amsg要发送的文本消息
Returns
发送成功返回true,否则返回false

◆ send_pack() [1/2]

bool ngl::ntcp::send_pack ( i32_sessionid asession,
std::shared_ptr< pack > & lpack )

发送一个已构建的类型化数据包。

Parameters
asession目标会话ID
lpack要发送的数据包共享指针
Returns
发送成功返回true,否则返回false

◆ send_pack() [2/2]

bool ngl::ntcp::send_pack ( i32_sessionid asession,
std::shared_ptr< void > & lpack )

发送类型擦除的数据包。

用于通用转发路径,支持任意类型的数据包。

Parameters
asession目标会话ID
lpack类型擦除的数据包共享指针
Returns
发送成功返回true,否则返回false

◆ send_server() [1/3]

template<typename Y, typename T>
bool ngl::ntcp::send_server ( const std::set< i32_serverid > & aserverids,
const Y & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )

向多个服务器广播类型化载荷。

向多个服务器广播类型化载荷的实现。

Template Parameters
Y要发送的数据类型
T网络传输类型,默认为Y
Parameters
aserverids目标服务器ID集合
adata要发送的数据
aactorid发送方Actor ID
arequestactorid请求方Actor ID
Returns
发送成功返回true,否则返回false

◆ send_server() [2/3]

template<typename Y, typename T>
bool ngl::ntcp::send_server ( i32_serverid aserverid,
const Y & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )

先解析服务器会话,再序列化并发送载荷。

将一个服务器ID解析为其活跃会话后再发送的实现。

Template Parameters
Y要发送的数据类型
T网络传输类型,默认为Y
Parameters
aserverid目标服务器ID
adata要发送的数据
aactorid发送方Actor ID
arequestactorid请求方Actor ID
Returns
发送成功返回true,否则返回false

◆ send_server() [3/3]

bool ngl::ntcp::send_server ( i32_serverid aserverid,
std::shared_ptr< pack > & apack )

向指定服务器发送数据包。

便捷包装器,将服务器ID解析为其对应的会话后发送。

Parameters
aserverid目标服务器ID
apack要发送的数据包共享指针
Returns
发送成功返回true,否则返回false

◆ set_close()

void ngl::ntcp::set_close ( int asession,
const std::string & aip,
i16_port aport,
const std::function< void(i32_sessionid)> & afun )

为会话注册自动重连行为。

当会话意外关闭时,自动尝试重新连接到指定的服务器地址。

Parameters
asession会话ID
aip重连目标IP地址
aport重连目标端口
afun重连成功后的回调函数

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