跳到主要内容

创建 Subscription

Subscription CreateSubscription(double publishing_interval_ms = 500.0);
前置阅读 / 配套

参数

参数默认说明
publishing_interval_ms500.0服务端推送数据的最小间隔 (ms), 服务端可能 revise (调整)

例子

auto sub = s.CreateSubscription(500.0);
std::cout << "Subscription handle = " << sub.Handle() << "\n";
std::cout << "Initial interval = " << sub.PublishingIntervalMs() << " ms\n";

多订阅分流

如果一个应用既要 100 ms 高频订阅 (运动数据) 又要 5000 ms 低频订阅 (环境温度), 创建 2 个 Subscription 分流, 不要混在一个里:

auto fast = s.CreateSubscription(100.0);
fast.AddNode("ns=2;s=AxisPosition", [](DataValue const& dv) { /* ... */ });

auto slow = s.CreateSubscription(5000.0);
slow.AddNode("ns=2;s=AmbientTemperature", [](DataValue const& dv) { /* ... */ });

每个 Subscription 都是独立的发布节奏, 互不影响.


Subscription 公共属性 (访问器)

类别属性类型访问说明
标识Handle()DarraUa_SubscriptionHandleRC 层句柄 (服务端订阅 ID 关联)
配置PublishingIntervalMs()doubleR实际生效的发布间隔 (revised), 由 Modify() 更新

Subscription 公共方法

方法说明
AddNode(node_id, cb, attr = Value, sampling_ms = -1)添加单 MI
AddMany(node_ids, cb, attr = Value)批量添加, 返回 (handle, status) 列表
Remove(mi_handle)移除单 MI
RemoveByNodeId(node_id)按 NodeId 移除全部对应 MI
SetPublishingEnabled(bool)启停整条订阅的发布
Pump(timeout_ms = 2000)手动触发一次 Publish (AutoPublish 启用时无需手调)
Modify(publishing_interval_ms, lifetime, keep_alive, ...)改订阅参数
SetMonitoringMode(mode, mi_handles)批量切 mode
SetMode(handle, mode)切单个 MI mode
ModifyMonitoredItems(requests)批量改采样
ModifyItem(handle, sampling_ms, queue_size, discard_oldest)改单 MI
Republish(seq_no)请求重发
~Subscription()RAII 析构 → 服务端 DeleteSubscription

RAII

Subscription 是 Move-only 栈对象, 离开作用域自动 DeleteSubscription:

{
auto sub = s.CreateSubscription(500.0);
sub.AddNode("ns=2;s=Counter", [](DataValue const& dv) { /* ... */ });
std::this_thread::sleep_for(std::chrono::seconds(10));
} // sub 析构, 服务端 DeleteSubscription

下一步