ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::nsp_server< ENUMDB, TDerived, T > Class Template Reference

NSP服务端模板类,负责协调多个读/写端对等节点之间的数据同步。 More...

#include <nsp_server.h>

Public Types

enum  { esend_maxcount = 100 }
 常量定义。 More...
using tnsp_server = nsp_server<ENUMDB, TDerived, T>
 本类型的别名,简化内部引用。

Static Public Member Functions

static void init (ndb_modular< ENUMDB, T, TDerived > *adbmodule)
 绑定权威数据库模块并注册通道消息处理器。
static void channel_register_reply (i64_actorid aactorid)
 将当前对等节点/订阅快照发送回新注册的节点。
static void channel_channel_data (i64_actorid aactorid, const np_channel_register< T > *recv)
 将初始行快照流式传输到新注册的节点,支持有界分块。
static void channel_dataid_sync (i64_actorid aactorid, const np_channel_register< T > *recv)
 将新节点的订阅范围广播给已有的对等节点。
static void handle (TDerived *, const message< np_channel_register< T > > &adata)
 处理对等节点注册消息,完成注册-快照-通告三步流程。
static void handle (TDerived *, const message< np_channel_exit< T > > &adata)
 处理对等节点退出消息,清理该节点的所有订阅状态。
static void handle (TDerived *, const message< np_channel_data< T > > &adata)
 处理来自对等节点的增量写入消息,更新权威数据库。

Detailed Description

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
class ngl::nsp_server< ENUMDB, TDerived, T >

NSP服务端模板类,负责协调多个读/写端对等节点之间的数据同步。

作为权威数据源的守护进程,管理对等节点的注册、订阅范围协商、 初始快照分发和增量写入中继。所有状态均为静态,每个数据库类型共享一份。

Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型

Member Enumeration Documentation

◆ anonymous enum

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
anonymous enum

常量定义。

Enumerator
esend_maxcount 

单次初始快照分块的最大行数。

Member Function Documentation

◆ channel_channel_data()

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::channel_channel_data ( i64_actorid aactorid,
const np_channel_register< T > * recv )
static

将初始行快照流式传输到新注册的节点,支持有界分块。

将初始行快照流式传输到新注册的节点,支持有界分块。

Parameters
aactorid目标节点的Actor ID
recv注册消息(包含订阅范围信息)
Parameters
aactorid目标节点的Actor ID
recv注册消息(包含订阅范围信息)

将初始行快照流式传输到新注册的节点,支持有界分块。

实现逻辑:

  1. 根据订阅类型(全量/部分)选择数据遍历方式
  2. 使用 esend_maxcount 常量控制每批发送的最大行数
  3. 每满一批立即发送,避免内存积压
  4. 对每个数据行应用字段权限过滤(通过 field_copy
  5. 最后发送带有 m_recvfinish=true 标记的尾包
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactorid目标节点的Actor ID
recv注册消息(包含订阅范围信息)

将初始行快照流式传输到新注册的节点,支持有界分块。

实现逻辑:

  1. 根据订阅类型(全量/部分)选择数据遍历方式
  2. 使用 esend_maxcount 常量控制每批发送的最大行数
  3. 每满一批立即发送,避免内存积压
  4. 对每个数据行应用字段权限过滤(通过 field_copy
  5. 最后发送带有 m_recvfinish=true 标记的尾包
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactorid目标节点的Actor ID
recv注册消息(包含订阅范围信息)

全量订阅者以有界分块方式接收整个数据集。

部分订阅者仅接收其声明的读/写行集合。

当最后一个分块恰好落在边界上时,发送一个空尾包作为结束。

◆ channel_dataid_sync()

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::channel_dataid_sync ( i64_actorid aactorid,
const np_channel_register< T > * recv )
static

将新节点的订阅范围广播给已有的对等节点。

将新节点的订阅范围广播给已有的对等节点。

Parameters
aactorid新节点的Actor ID
recv注册消息(包含订阅范围和字段权限)
Parameters
aactorid新节点的Actor ID
recv注册消息(包含订阅范围和字段权限)

将新节点的订阅范围广播给已有的对等节点。

构造 np_channel_dataid_sync<T> 消息,包含:

  • 新节点的Actor ID
  • 订阅类型(全量/部分)
  • 部分订阅时的读/写行ID集合
  • 字段权限规则

将消息发送给除新节点外的所有已注册对等节点, 使它们能够更新路由表和退出状态。

Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactorid新节点的Actor ID
recv注册消息(包含订阅范围和字段权限)

将新节点的订阅范围广播给已有的对等节点。

构造 np_channel_dataid_sync<T> 消息,包含:

  • 新节点的Actor ID
  • 订阅类型(全量/部分)
  • 部分订阅时的读/写行ID集合
  • 字段权限规则

将消息发送给除新节点外的所有已注册对等节点, 使它们能够更新路由表和退出状态。

Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactorid新节点的Actor ID
recv注册消息(包含订阅范围和字段权限)

每个已有对等节点都需要新对等节点的范围,以保持路由和退出状态完整。

◆ channel_register_reply()

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::channel_register_reply ( i64_actorid aactorid)
static

将当前对等节点/订阅快照发送回新注册的节点。

将当前对等节点/订阅快照发送回新注册的节点。

Parameters
aactorid新注册节点的Actor ID
Parameters
aactorid新注册节点的Actor ID

将当前对等节点/订阅快照发送回新注册的节点。

构造 np_channel_register_reply<T> 消息,包含:

  • 服务端自身的Actor ID
  • 所有全量订阅节点集合(读/写)
  • 其他对等节点的订阅范围(排除新节点自身)
  • 合并后的字段权限规则
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactorid新注册节点的Actor ID

将当前对等节点/订阅快照发送回新注册的节点。

构造 np_channel_register_reply<T> 消息,包含:

  • 服务端自身的Actor ID
  • 所有全量订阅节点集合(读/写)
  • 其他对等节点的订阅范围(排除新节点自身)
  • 合并后的字段权限规则
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactorid新注册节点的Actor ID

返回对等节点范围和合并的字段规则,使新对等节点可以立即参与。

◆ handle() [1/3]

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::handle ( TDerived * ,
const message< np_channel_data< T > > & adata )
static

处理来自对等节点的增量写入消息,更新权威数据库。

处理来自对等节点的增量写入消息,更新权威数据库。

Parameters
aactor服务端Actor指针
adata增量数据消息
Parameters
aactor服务端Actor指针
adata增量数据消息

处理来自对等节点的增量写入消息,更新权威数据库。

处理流程:

  1. 验证发送者是否已注册且具有写权限
  2. 遍历消息中的数据更新:
    • 检查写权限
    • 应用字段权限过滤(通过 field_copy
  3. 遍历消息中的数据删除:
    • 检查写权限
    • 从数据库中删除记录
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactor服务端Actor指针
adata增量数据消息

处理来自对等节点的增量写入消息,更新权威数据库。

处理流程:

  1. 验证发送者是否已注册且具有写权限
  2. 遍历消息中的数据更新:
    • 检查写权限
    • 应用字段权限过滤(通过 field_copy
  3. 遍历消息中的数据删除:
    • 检查写权限
    • 从数据库中删除记录
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactor服务端Actor指针
adata增量数据消息

说明逻辑有问题

◆ handle() [2/3]

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::handle ( TDerived * ,
const message< np_channel_exit< T > > & adata )
static

处理对等节点退出消息,清理该节点的所有订阅状态。

处理对等节点退出消息,清理该节点的所有订阅状态。

Parameters
aactor服务端Actor指针
adata退出消息
Parameters
aactor服务端Actor指针
adata退出消息

处理对等节点退出消息,清理该节点的所有订阅状态。

清理操作包括:

  1. 从部分订阅集合中移除
  2. 从写全量订阅集合中移除
  3. 从读全量订阅集合中移除
  4. 从订阅范围映射中移除
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactor服务端Actor指针
adata退出消息

处理对等节点退出消息,清理该节点的所有订阅状态。

清理操作包括:

  1. 从部分订阅集合中移除
  2. 从写全量订阅集合中移除
  3. 从读全量订阅集合中移除
  4. 从订阅范围映射中移除
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactor服务端Actor指针
adata退出消息

◆ handle() [3/3]

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::handle ( TDerived * ,
const message< np_channel_register< T > > & adata )
static

处理对等节点注册消息,完成注册-快照-通告三步流程。

处理对等节点注册消息,完成注册-快照-通告三步流程。

Parameters
aactor服务端Actor指针
adata注册消息
Parameters
aactor服务端Actor指针
adata注册消息

处理对等节点注册消息,完成注册-快照-通告三步流程。

处理流程:

  1. 检查是否已注册(防止重复注册)
  2. 根据订阅类型(全量/部分)初始化订阅范围
  3. 合并字段权限(按Actor类型,非单个节点)
  4. 记录部分订阅节点
  5. 执行三步注册流程:
    • channel_register_reply: 发送当前状态快照
    • channel_channel_data: 发送初始数据快照
    • channel_dataid_sync: 通告其他对等节点
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactor服务端Actor指针
adata注册消息

处理对等节点注册消息,完成注册-快照-通告三步流程。

处理流程:

  1. 检查是否已注册(防止重复注册)
  2. 根据订阅类型(全量/部分)初始化订阅范围
  3. 合并字段权限(按Actor类型,非单个节点)
  4. 记录部分订阅节点
  5. 执行三步注册流程:
    • channel_register_reply: 发送当前状态快照
    • channel_channel_data: 发送初始数据快照
    • channel_dataid_sync: 通告其他对等节点
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
aactor服务端Actor指针
adata注册消息

字段权限按对等节点Actor类型合并,而非按单个对等节点ID。

注册分三步完成:回复对等节点状态、发送快照、通告新对等节点。

◆ init()

template<pbdb::ENUM_DB ENUMDB, typename TDerived, typename T>
void ngl::nsp_server< ENUMDB, TDerived, T >::init ( ndb_modular< ENUMDB, T, TDerived > * adbmodule)
static

绑定权威数据库模块并注册通道消息处理器。

绑定权威数据库模块并注册通道消息处理器。

Parameters
adbmodule数据库模块指针
Parameters
adbmodule数据库模块指针

绑定权威数据库模块并注册通道消息处理器。

初始化流程:

  1. 保存数据库模块指针
  2. 初始化字段权限管理器(非对等节点模式)
  3. 注册三种通道消息的处理器:
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
adbmodule数据库模块指针

绑定权威数据库模块并注册通道消息处理器。

初始化流程:

  1. 保存数据库模块指针
  2. 初始化字段权限管理器(非对等节点模式)
  3. 注册三种通道消息的处理器:
Template Parameters
ENUMDB数据库枚举标识符
TDerived派生Actor类型
T数据行的protobuf消息类型
Parameters
adbmodule数据库模块指针

NSP服务器监听对等节点注册消息。

当新对等节点加入时,触发注册流程。 处理器将完成注册-快照-通告三步流程。

监听对等节点写入消息。

当对等节点发送增量数据更新时触发。 处理器将更新权威数据库并应用字段权限过滤。

监听对等节点断开连接通知。

当对等节点退出或断开连接时触发。 处理器将清理该节点的所有订阅状态。


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