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

全局路由表,由actor_client/actor_server共享。 More...

#include <naddress.h>

Public Types

using map_guidserver = std::unordered_map<nguid, i32_serverid>
 完整Actor GUID -> 拥有者服务器ID。
using map_typeguid = std::unordered_map<i16_actortype, std::unordered_set<nguid>>
 Actor类型 -> 该类型的所有已知Actor GUID。
using map_servernode = std::unordered_map<i32_serverid, nnode_session>
 服务器ID -> 活跃节点/会话元数据。
using map_rolegateway = std::unordered_map<nguid, i32_serverid>
 角色Actor GUID -> 当前服务该角色的网关服务器。
using ergodic_callbackfun = std::function<bool(const map_guidserver&, const map_servernode&, const map_rolegateway&)>
 快照式回调,可以同时检查所有路由表。
using foreach_callbackfun = std::function<bool(const nnode_session&)>
 遍历已知服务器/会话条目的回调。

Static Public Member Functions

static bool set_node (const nactornode &anode)
 设置或更新节点连接信息
static void actor_address_add (i32_serverid aserverid, i64_actorid adataid)
 添加单个Actor地址映射(线程安全版本)
static void actor_address_add (i32_serverid aserverid, const std::vector< i64_actorid > &avec)
 批量添加Actor地址映射(线程安全版本)
static void actor_address_del (i64_actorid adataid)
 删除单个Actor地址映射(线程安全版本)
static void actor_address_del (const std::vector< i64_actorid > &avec)
 批量删除Actor地址映射(线程安全版本)
static void set_session (i32_serverid aserverid, i32_sessionid asession)
 绑定服务器ID到会话ID
static i32_sessionid sessionid (i32_serverid aserverid)
 根据服务器ID获取会话ID
static i32_serverid serverid (const nguid &aguid)
 根据Actor GUID获取所在服务器ID
static void serveridlist (ENUM_ACTOR atype, std::set< i32_serverid > &aservers)
 获取指定Actor类型的所有服务器ID
static void gatewayid_add (const nguid &aguid, i32_serverid aserverid)
 添加角色到网关的路由映射
static void gatewayid_del (const nguid &aguid)
 删除角色到网关的路由映射
static i32_serverid gatewayid (const nguid &aguid)
 根据角色GUID获取其所在网关的服务器ID
static void gatewayid (const std::set< nguid > &aactorset, std::set< i32_serverid > &aserverset)
 批量查询角色集合对应的网关服务器ID
static void foreach (const foreach_callbackfun &afun)
 遍历所有会话节点
static void ergodic (const ergodic_callbackfun &afun)
 全量遍历地址表(调试/快照用)
static map_guidserver get_actorserver_map ()
 获取Actor地址映射的副本
static i32_sessionid sessionbyrole (i16_area aarea, i32_actordataid aroleid)
 通过区域和角色ID获取会话ID
static bool forward (handle_pram &apram)
 转发消息到目标Actor

Detailed Description

全局路由表,由actor_client/actor_server共享。

维护三张核心映射表:

  1. Actor GUID -> 服务器ID(哪个服务器托管了哪个Actor)
  2. 服务器ID -> 会话元数据(服务器的网络连接信息)
  3. 角色GUID -> 网关服务器(角色当前连接的网关)

所有方法均为线程安全的静态方法,内部使用shared_mutex保护。

Member Function Documentation

◆ actor_address_add() [1/2]

void ngl::naddress::actor_address_add ( i32_serverid aserverid,
const std::vector< i64_actorid > & avec )
static

批量添加Actor地址映射(线程安全版本)

Parameters
aserverid服务器ID
avecActorID列表

◆ actor_address_add() [2/2]

void ngl::naddress::actor_address_add ( i32_serverid aserverid,
i64_actorid adataid )
static

添加单个Actor地址映射(线程安全版本)

Parameters
aserverid服务器ID
adataidActor数据ID

◆ actor_address_del() [1/2]

void ngl::naddress::actor_address_del ( const std::vector< i64_actorid > & avec)
static

批量删除Actor地址映射(线程安全版本)

Parameters
avecActorID列表

◆ actor_address_del() [2/2]

void ngl::naddress::actor_address_del ( i64_actorid adataid)
static

删除单个Actor地址映射(线程安全版本)

Parameters
adataidActorID

◆ ergodic()

void ngl::naddress::ergodic ( const ergodic_callbackfun & afun)
static

全量遍历地址表(调试/快照用)

同时持有三把读锁,回调接收所有映射的只读引用。

Parameters
afun回调函数,参数为(actorserver, session, rolegateway)

◆ foreach()

void ngl::naddress::foreach ( const foreach_callbackfun & afun)
static

遍历所有会话节点

Parameters
afun回调函数,返回false提前终止遍历

◆ forward()

bool ngl::naddress::forward ( handle_pram & apram)
static

转发消息到目标Actor

通过handle_pram中编码的转发函数执行实际的消息路由。

Parameters
apram消息处理参数
Returns
bool 转发是否成功

◆ gatewayid() [1/2]

i32_serverid ngl::naddress::gatewayid ( const nguid & aguid)
static

根据角色GUID获取其所在网关的服务器ID

Parameters
aguid角色GUID
Returns
网关服务器ID,未找到返回-1

◆ gatewayid() [2/2]

void ngl::naddress::gatewayid ( const std::set< nguid > & aactorset,
std::set< i32_serverid > & aserverset )
static

批量查询角色集合对应的网关服务器ID

使用set自然去重,多个角色可能共享同一网关进程。

Parameters
aactorset角色GUID集合
aserverset输出网关服务器ID集合

◆ gatewayid_add()

void ngl::naddress::gatewayid_add ( const nguid & aguid,
i32_serverid aserverid )
static

添加角色到网关的路由映射

Parameters
aguid角色GUID
aserverid网关服务器ID

◆ gatewayid_del()

void ngl::naddress::gatewayid_del ( const nguid & aguid)
static

删除角色到网关的路由映射

Parameters
aguid角色GUID

◆ get_actorserver_map()

naddress::map_guidserver ngl::naddress::get_actorserver_map ( )
static

获取Actor地址映射的副本

Returns
当前actorserver映射的拷贝

◆ serverid()

i32_serverid ngl::naddress::serverid ( const nguid & aguid)
static

根据Actor GUID获取所在服务器ID

Parameters
aguidActor的GUID
Returns
服务器ID,查找失败返回-1

◆ serveridlist()

void ngl::naddress::serveridlist ( ENUM_ACTOR atype,
std::set< i32_serverid > & aservers )
static

获取指定Actor类型的所有服务器ID

Parameters
atypeActor类型枚举
aservers输出服务器ID集合

◆ sessionbyrole()

i32_sessionid ngl::naddress::sessionbyrole ( i16_area aarea,
i32_actordataid aroleid )
static

通过区域和角色ID获取会话ID

Parameters
aarea区域标识
aroleid角色数据ID
Returns
会话ID,查找失败返回-1

◆ sessionid()

i32_sessionid ngl::naddress::sessionid ( i32_serverid aserverid)
static

根据服务器ID获取会话ID

Parameters
aserverid服务器ID
Returns
会话ID,查找失败返回-1

◆ set_node()

bool ngl::naddress::set_node ( const nactornode & anode)
static

设置或更新节点连接信息

若节点已存在则更新元数据(重连场景),否则新增条目。

Parameters
anode节点信息
Return values
true新节点插入成功
false已有节点更新成功

◆ set_session()

void ngl::naddress::set_session ( i32_serverid aserverid,
i32_sessionid asession )
static

绑定服务器ID到会话ID

会话ID是延迟绑定的,因为节点记录可能在TCP连接之前就已存在。

Parameters
aserverid服务器ID
asession会话ID

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