|
ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
|
全局路由表,由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 | |
全局路由表,由actor_client/actor_server共享。
维护三张核心映射表:
所有方法均为线程安全的静态方法,内部使用shared_mutex保护。
|
static |
批量添加Actor地址映射(线程安全版本)
| aserverid | 服务器ID |
| avec | ActorID列表 |
|
static |
添加单个Actor地址映射(线程安全版本)
| aserverid | 服务器ID |
| adataid | Actor数据ID |
|
static |
批量删除Actor地址映射(线程安全版本)
| avec | ActorID列表 |
|
static |
删除单个Actor地址映射(线程安全版本)
| adataid | ActorID |
|
static |
全量遍历地址表(调试/快照用)
同时持有三把读锁,回调接收所有映射的只读引用。
| afun | 回调函数,参数为(actorserver, session, rolegateway) |
|
static |
遍历所有会话节点
| afun | 回调函数,返回false提前终止遍历 |
|
static |
转发消息到目标Actor
通过handle_pram中编码的转发函数执行实际的消息路由。
| apram | 消息处理参数 |
|
static |
根据角色GUID获取其所在网关的服务器ID
| aguid | 角色GUID |
|
static |
批量查询角色集合对应的网关服务器ID
使用set自然去重,多个角色可能共享同一网关进程。
| aactorset | 角色GUID集合 |
| aserverset | 输出网关服务器ID集合 |
|
static |
添加角色到网关的路由映射
| aguid | 角色GUID |
| aserverid | 网关服务器ID |
|
static |
删除角色到网关的路由映射
| aguid | 角色GUID |
|
static |
获取Actor地址映射的副本
|
static |
根据Actor GUID获取所在服务器ID
| aguid | Actor的GUID |
|
static |
获取指定Actor类型的所有服务器ID
| atype | Actor类型枚举 |
| aservers | 输出服务器ID集合 |
|
static |
通过区域和角色ID获取会话ID
| aarea | 区域标识 |
| aroleid | 角色数据ID |
|
static |
根据服务器ID获取会话ID
| aserverid | 服务器ID |
|
static |
设置或更新节点连接信息
若节点已存在则更新元数据(重连场景),否则新增条目。
| anode | 节点信息 |
| true | 新节点插入成功 |
| false | 已有节点更新成功 |
|
static |
绑定服务器ID到会话ID
会话ID是延迟绑定的,因为节点记录可能在TCP连接之前就已存在。
| aserverid | 服务器ID |
| asession | 会话ID |