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

单例路由层,拥有共享工作线程池并将每个调用路由到正确的schedule_layer。 More...

#include <actor_manage.h>

Public Member Functions

void init (i32_threadsize apthreadnum)
 初始化actor管理器
void get_type (std::vector< i16_actortype > &aactortype)
 获取所有调度层的actor类型集合
template<typename T, bool IS_SEND = true>
void push_task_id (const nguid &aguid, const std::shared_ptr< T > &apram)
bool add_actor (actor_base *apactor, const std::function< void()> &afun)
 添加新actor到管理器(裸指针版本)
bool add_actor (const ptractor &apactor, const std::function< void()> &afun)
 添加新actor到管理器(智能指针版本)
void erase_actor (const nguid &aguid, const std::function< void()> &afun=nullptr)
 从管理器中移除actor
bool is_have_actor (const nguid &aguid)
 检查管理器是否包含指定actor
void push (const ptractor &apactor, nthread *atorthread=nullptr, bool aready=true)
 将处理完成的actor返回调度
void push_task_id (const nguid &aguid, handle_pram &apram)
 向指定GUID的actor推送消息(单例路由层版本)
void push_task_id (const std::set< i64_actorid > &asetguid, handle_pram &apram)
 向多个GUID的actor批量推送消息(单例路由层版本)
void push_task_type (ENUM_ACTOR atype, handle_pram &apram)
 向指定类型的所有actor推送消息(全局版本)
void broadcast_task (handle_pram &apram)
 向所有广播actor推送消息(全局版本)
void statrt_suspend_thread ()
 启动挂起线程
void finish_suspend_thread ()
 完成挂起线程
int32_t actor_count ()
 获取所有层的actor总数
void get_actor_stat (msg_actor_stat &adata)
 获取所有层的actor统计信息

Static Public Member Functions

static actor_manage & instance ()

Friends

class schedule_layer

Detailed Description

单例路由层,拥有共享工作线程池并将每个调用路由到正确的schedule_layer。

该类是Actor调度系统的核心,负责:

  • 管理所有调度层(schedule_layer)
  • 维护共享工作线程池
  • 提供统一的Actor注册和消息路由接口
  • 处理跨层关注点:路由actor回退、统计信息合并和协调挂起

设计特点:

  • 外部调用者只使用此类;schedule_layer为内部实现
  • 堆分配的单例,永不销毁
  • 支持挂起/恢复调度(用于DB刷盘、热重载等)

使用示例:

// 初始化调度系统
actor_manage::instance().init(8); // 8个工作线程
// 注册actor
actor_manage::instance().add_actor(my_actor, [](){ });
// 发送消息
actor_manage::instance().push_task_id(actor_guid, message);

Member Function Documentation

◆ actor_count()

int32_t ngl::actor_manage::actor_count ( )

获取所有层的actor总数

Returns
所有调度层中注册的actor总数

◆ add_actor() [1/2]

bool ngl::actor_manage::add_actor ( actor_base * apactor,
const std::function< void()> & afun )

添加新actor到管理器(裸指针版本)

创建空删除器的智能指针包装,然后委托给智能指针版本。

Parameters
[in]apactor要添加的actor裸指针
[in]afun添加完成后的回调函数
Returns
true表示添加成功,false表示指针为空或GUID重复
Note
空删除器确保actor生命周期由外部管理

◆ add_actor() [2/2]

bool ngl::actor_manage::add_actor ( const ptractor & apactor,
const std::function< void()> & afun )

添加新actor到管理器(智能指针版本)

根据actor的GUID计算所属调度层并委托添加。

Parameters
[in]apactor要添加的actor智能指针
[in]afun添加完成后的回调函数
Returns
true表示添加成功

◆ broadcast_task()

void ngl::actor_manage::broadcast_task ( handle_pram & apram)

向所有广播actor推送消息(全局版本)

遍历所有调度层的广播表推送消息。

Parameters
[in]apram消息处理参数

◆ erase_actor()

void ngl::actor_manage::erase_actor ( const nguid & aguid,
const std::function< void()> & afun = nullptr )

从管理器中移除actor

根据GUID计算所属调度层并委托移除。

Parameters
[in]aguid要移除的actor的GUID
[in]afun移除完成后的回调函数(可选)

◆ finish_suspend_thread()

void ngl::actor_manage::finish_suspend_thread ( )

完成挂起线程

清除挂起标志,将池恢复到初始状态,并唤醒所有可能在 pop_workthreads()内阻塞的调度器。

Note
写入锁保护,线程安全

◆ get_actor_stat()

void ngl::actor_manage::get_actor_stat ( msg_actor_stat & adata)

获取所有层的actor统计信息

收集所有调度层的actor统计信息并合并。

Parameters
[out]adata输出参数,存储actor统计信息

◆ get_type()

void ngl::actor_manage::get_type ( std::vector< i16_actortype > & aactortype)

获取所有调度层的actor类型集合

收集所有LAYER_COUNT个调度层中注册的actor类型,去重后返回。

Parameters
[out]aactortype输出参数,存储所有唯一的actor类型

◆ init()

void ngl::actor_manage::init ( i32_threadsize apthreadnum)

初始化actor管理器

先创建共享工作线程池(每个工作线程启动一个分离线程并在信号量上阻塞), 然后创建LAYER_COUNT个调度层。要求LAYER_COUNT必须是2的幂。

Parameters
[in]apthreadnum工作线程数量
Exceptions
断言失败如果LAYER_COUNT不是2的幂

◆ is_have_actor()

bool ngl::actor_manage::is_have_actor ( const nguid & aguid)

检查管理器是否包含指定actor

Parameters
[in]aguid要检查的actor的GUID
Returns
true表示actor存在,false表示不存在

◆ push()

void ngl::actor_manage::push ( const ptractor & apactor,
nthread * atorthread = nullptr,
bool aready = true )

将处理完成的actor返回调度

如果提供了工作线程,先将其归还到池中,然后将actor返回对应调度层。

Parameters
[in]apactor处理完成的actor智能指针
[in]atorthread使用的工作线程(可选,归还到池中)
[in]aready是否强制入队(默认true)

◆ push_task_id() [1/2]

void ngl::actor_manage::push_task_id ( const nguid & aguid,
handle_pram & apram )

向指定GUID的actor推送消息(单例路由层版本)

防止转发到尚未注册的路由actor造成无限循环。 如果目标是路由actor但尚未注册,则直接返回。

Parameters
[in]aguid目标actor的GUID
[in]apram消息处理参数

◆ push_task_id() [2/2]

void ngl::actor_manage::push_task_id ( const std::set< i64_actorid > & asetguid,
handle_pram & apram )

向多个GUID的actor批量推送消息(单例路由层版本)

按层分区目标,本地投递,然后将任何未命中的消息以单批方式转发给路由actor。

Parameters
[in]asetguid目标actor的GUID集合
[in]apram消息处理参数

◆ push_task_type()

void ngl::actor_manage::push_task_type ( ENUM_ACTOR atype,
handle_pram & apram )

向指定类型的所有actor推送消息(全局版本)

遍历所有调度层推送消息,并转发一次给路由actor以便远程节点接收类型广播。

Parameters
[in]atype目标actor类型
[in]apram消息处理参数

◆ statrt_suspend_thread()

void ngl::actor_manage::statrt_suspend_thread ( )

启动挂起线程

自旋等待直到每个工作线程都归还到池中,然后冻结调度。 pop_workthreads()检查m_suspend标志并在设置后停止分发工作线程。

Note
写入锁保护,线程安全

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