关键字:OMG,RTPS,DDS

The Real-time Publish-Subscribe Protocol (RTPS) DDS Interoperability Wire Protocol Specification,Version 2.2,September 2014

8.2.9.2. DDS 数据读取者(DataReader)

DDS DataReader从相应RTPS Reader的HistoryCache获取其接收的数据。存储在HistoryCache中的更改数由QoS设置(如HISTORY和RESOURCE_LIMITS QoS)确定。

每个匹配的Writer将尝试将所有相关数据样本从其HistoryCache传输到Reader的HistoryCache中。在DDS DataReader上调用read或take方法访问HistoryCache。返回给用户的更改是HistoryCache中的更改,它们通过了Reader设置的所有过滤器(如果有)限制。

Reader过滤器同样地由DDS_FILTER(reader,change)表示。如上所述,DDS实现可能在Writer端执行大部分过滤。在这种情况下,被过滤的数据样本永远不会被发送(因此不会出现在Reader的HistoryCache中),或者包含应用于何处的过滤器及其对应的结果信息(基于内容的过滤)。

DDS DataReader还可以决定从HistoryCache中删除更改以满足TIME_BASED_FILTER等QoS的设置。这种确切的行为仍然是特定于实现的,并且不由RTPS协议建模。

以下状态图说明了DDS DataReader如何访问HistoryCache中的更改。


图 8 7 DDS DataReader访问HistoryCache状态图

表 8 12 DDS DataReader访问HistoryCache转换表

8.2.9.2.1. 转换 T1

这种转换是由创建DDS DataReader“the_dds_reader”触发的。
转换在虚拟机中执行以下逻辑动作:

 the_rtps_reader = new RTPS::Reader;the_dds_reader.related_rtps_reader := the_rtps_reader;
8.2.9.2.2. 转换 T2

这种转换是通过DDS DataReader“the_dds_reader”调用“read”方法读取数据触发的。 返回到应用程序的更改将保留在RTPS Reader的HistoryCache中,后续的read或take方法可以再次找到它们。

转换在虚拟机中执行以下逻辑动作:

the_rtps_reader := the_dds_reader.related_rtps_reader;
a_change_list := new();
FOREACH change IN the_rtps_reader.reader_cache.changes
{if DDS_FILTER(the_rtps_reader, change) ADD change TO a_change_list;
}
RETURN a_change_list;

DDS_FILTER()方法反映了DDS DataReader API根据CacheChange :: kind,QoS,内容过滤器和其他机制选择更改子集的功能。请注意上面的逻辑动作仅反映行为,而不一定反映协议的实际实现。

8.2.9.2.3. 转换 T3

这种转换是通过DDS DataReader“the_dds_reader”调用“take”方法读取数据触发的。 返回到应用程序的更改将从RTPS Reader的HistoryCache中删除,后续的read或take方法找不到相同的更改。

转换在虚拟机中执行以下逻辑动作:

the_rtps_reader := the_dds_reader.related_rtps_reader;
a_change_list := new();
FOREACH change IN the_rtps_reader.reader_cache.changes
{if DDS_FILTER(the_rtps_reader, change) {ADD change TO a_change_list;}the_rtps_reader.reader_cache.remove_change(a_change);
}
RETURN a_change_list;

DDS_FILTER()方法反映了DDS DataReader API根据CacheChange :: kind,QoS,内容过滤器和其他机制选择更改子集的功能。请注意上面的逻辑动作仅反映行为,而不一定反映协议的实际实现。
转换后,以下后置条件成立:

FOREACH change IN a_change_listchange BELONGS_TO the_rtps_reader.reader_cache.changes == FALSE
8.2.9.2.4. 转换 T4

这种转换是由DDS DataReader“the_dds_reader”的析构触发的。

转换在虚拟机中执行以下逻辑动作:

delete the_dds_reader.related_rtps_reader;

译文连载

RTPS规范-上一篇:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_005

RTPS规范-下一篇:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_007

DDS规范-译文连载:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001


相关链接

【1-What:什么是DDS? 】

【2-Why:为什么选择DDS? 】

【3-How:DDS如何工作?】

DDS科普:一文读懂DDS(数据分发服务)

产品介绍:BLUE DCS分布式数据连接解决方案

产品试用: 海蓝云平台-Blue DCS


实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_006相关推荐

  1. 实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_007

    关键字:OMG,RTPS,DDS The Real-time Publish-Subscribe Protocol (RTPS) DDS Interoperability Wire Protocol ...

  2. 数据分发服务DDS及实时发布订阅协议RTPS-DDS互操作协议规范下载

    数据分发服务(DDS) Data Distribution Service (DDS)V1.4 实时发布订阅协议(RTPS) The Real-time Publish-Subscribe Proto ...

  3. DDS (Data Distribution Service) 数据分发服务-规范中文翻译_006

    DDS (Data Distribution Service) 数据分发服务-规范中文翻译_006 2.以数据为中心的订阅发布(DCPS) 2.2 平台无关模型(Platform Independen ...

  4. WebSocket 协议 RFC 文档(全中文翻译)

    概述 经过半年的捣鼓,终于将 WebSocket 协议(RFC6455)全篇翻译完成.现在将所有章节全部整理到一篇文章中,方便大家阅读.如果大家想看具体的翻译文档,可以去我的GitHub中查看. 具体 ...

  5. DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001

    DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001 1. 概述 1.1 简介 DDS规范描述了用于分布式应用程序通信和集成的以数据为中心的发布 - 订阅 ...

  6. DDS (Data Distribution Service) 数据分发服务-规范中文翻译_003

    DDS (Data Distribution Service) 数据分发服务-规范中文翻译_003 2.以数据为中心的订阅发布(DCPS) 2.2 平台无关模型(Platform Independen ...

  7. XMPP中文 XEP-0060: 发布-订阅(一)

    本文的英文原文来自XEP-0060 XEP-0060: 发布-订阅 摘要: 本文定义了一个XMPP协议扩展来实现实现通用的 发布-订阅 功能.这个协议使 XMPP实体能在一个pubsub服务创建节点( ...

  8. XMPP中文 XEP-0060: 发布-订阅(二)

    例子 130. 实体请求一个即时节点 <iq type='set'from='hamlet@denmark.lit/elsinore'to='pubsub.shakespeare.lit'id= ...

  9. 【MQTT 5.0】协议 ——发布订阅模式、Qos、keepalive、连接认证、消息结构

    一.前言 1.1 MQTT 协议概述 1.2 MQTT规范 二.MQTT 协议基本概念 2.1 发布/订阅模式 2.11 MQTT 发布/订阅模式 2.12 MQTT 发布/订阅中的消息路由 2.13 ...

最新文章

  1. 卡片右上角三角形效果,按钮点击变色
  2. java struts2 session mysql 内存不足_Java - 用户在线的数据库实现方法和内存实现方法...
  3. 【Python】Python四大内置高阶函数(map、reduce、filter、sorted)
  4. 依赖注入_Map类型的注入
  5. H.265在QRTC场景的落地运用
  6. Caffe 增加自定义 Layer 及其 ProtoBuffer 参数
  7. 《人人都是产品经理》读后感
  8. 自定义导航栏的背景、标题、返回按钮文字颜色[转]
  9. 自己实现的数值到大写人民币的实现
  10. 深入了解微服务的优点与缺点
  11. mcgs组态软件中字体如果从左到右变化_MCGS脚本程序 -
  12. 斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具
  13. 计算机汉字五笔输入法,《计算机汉字输入五笔字型打字速成》.pdf
  14. 软件项目风险管理(Project Risk Management)
  15. 武汉大学计算机学院徐霜,物联网工程专业建设与实践教学研究_余琍
  16. Redis队列和专业MQ的对比和选型
  17. 5iABCDS原来是这样赋能 “严肃游戏”的!
  18. 潮汐计算php源码,潮汐选股公式
  19. 控件测试之单行文本框测试
  20. c语言如何画简单图形,如何用C语言画基本图形

热门文章

  1. C++序列化与反序列化的简单探索
  2. 一、 云计算基础1-数据中心发展阶段
  3. 局域网两台电脑同步时间
  4. 游戏之网络同步【转载】
  5. COCI 2015/2016 PROKLETNIK(单调栈+线段树)
  6. switch对String的支持
  7. angular属性绑定绑定函数,插值表达式插函数,ngIf绑定函数
  8. CF6D Lizards and Basements 2题解
  9. 通俗易懂数仓建模—Inmon范式建模与Kimball维度建模
  10. 港联证券|“牛市旗手”频遭股东减持 机构仍看好板块后市表现