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

WebSocket传输门面类。 More...

#include <nws.h>

Public Member Functions

bpoolpool ()
 获取共享的出站pack池。
bool init (i16_port aport, i32_threadsize asocketthreadnum, bool aouternet, bool ause_tls=false, const ws_tls_options &atls_options={})
 初始化WebSocket服务端/客户端服务。
bool init (const net_listen_endpoint &alisten, i32_threadsize asocketthreadnum, bool aouternet, bool ause_tls=false, const ws_tls_options &atls_options={})
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)
 发起异步WebSocket连接请求。
bool connect (const std::string &aip, i16_port aport, const std::function< void(i32_sessionid)> &afun, bool await, bool areconnection)
 发起异步WebSocket连接请求(带阻塞等待和重连选项)。
bool connect (i32_serverid aserverid, const std::function< void(i32_session)> &afun, bool await, bool areconnection)
 连接到已配置的服务器。
bool send_msg (i32_sessionid asession, const std::string &amsg)
 通过WebSocket发送原始文本消息。
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 nwsinstance ()
 获取WebSocket单例服务实例。

Detailed Description

WebSocket传输门面类。

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

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

Member Function Documentation

◆ close()

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

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

Parameters
asession要关闭的会话ID

◆ close_net()

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

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

Parameters
asession要关闭的会话ID

◆ connect() [1/3]

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

发起异步WebSocket连接请求。

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

◆ connect() [2/3]

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

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

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

◆ connect() [3/3]

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

连接到已配置的服务器。

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

◆ init()

bool ngl::nws::init ( i16_port aport,
i32_threadsize asocketthreadnum,
bool aouternet,
bool ause_tls = false,
const ws_tls_options & atls_options = {} )

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

Parameters
aport监听端口号
asocketthreadnumsocket工作线程数量
aouternet是否允许公网客户端连接
ause_tls是否启用TLS(WSS)
atls_optionsTLS配置选项
Returns
初始化成功返回true,否则返回false

◆ instance()

nws & ngl::nws::instance ( )
inlinestatic

获取WebSocket单例服务实例。

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

◆ ip()

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

选择合适的IP地址。

机器人节点选择公网IP,否则选择内网IP。

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

◆ pool()

bpool & ngl::nws::pool ( )

获取共享的出站pack池。

Returns
pack内存池的引用

◆ port()

i16_port ngl::nws::port ( )

获取绑定的监听端口。

Returns
当前绑定的监听端口号

◆ send() [1/5]

template<typename Y, typename T>
bool ngl::nws::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::nws::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::nws::send ( const std::set< i32_sessionid > & asession,
const Y & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )

向多个会话广播类型化载荷(带请求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::nws::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::nws::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::nws::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

◆ send_client() [2/2]

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

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

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

◆ send_msg()

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

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

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

◆ send_pack() [1/2]

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

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

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

◆ send_pack() [2/2]

bool ngl::nws::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::nws::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::nws::send_server ( i32_serverid aserverid,
const Y & adata,
i64_actorid aactorid,
i64_actorid arequestactorid )

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

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

◆ send_server() [3/3]

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

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

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

◆ set_close()

void ngl::nws::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 struct was generated from the following files: