本文主要是介绍什么是OpenDDS???What is OpenDDS???开源项目???,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- OpenDDS
- ACE
- TAO
- ACE+TAO
- OpenDDS类型定义
- OpenDDS Demo Code
- OpenDDS 可扩展的传输框架
- OpenDDS 发现
- 利用DCPSInfoRepo的集中式发现(动态发现)
- 利用RTPS的对等发现(静态发现)
OpenDDS
- OpenDDS是用C++语言针对"对象管理组织“(OMG)关于数据分发服务(Data Distribution Service,DDS)规范的开源实现。
- OpenDDS采用C++语言实现,但也提供JAVA和JMS的开发接口,这意味着JAVA程序开发也可以使用OpenDDS。
- OpenDDS是构建在ACE(Adaptive Communication Environment,自适应通信环境,一套基于C++语言的开源网络可开发库)上,通过ACE保证跨平台和可移植性。
- OpenDDS同时利用了TAO(The ACE ORB,基于ACE基础上的CORBA实现框架),提供IDL编译器等功能作为OpenDDS的DCPS信息仓库。
- OpenDDS遵循OMG的DDSV1.2规范,同时采用和ACE/TAO相同的license,允许开发者在保留版权申明的前提下在各种场合(包括商用)使用和修改源代码。
- 当前最新发行版本为OpenDDS3.15。
ACE
What is ACE?
TAO
What is TAO?
ACE+TAO
What is ACE+TAO?
More about ACE & TAO
读OpenDDS-latest.pdf
OpenDDS类型定义
OpenDDS定义IDL文件
@topic
struct Message
{string from;string subject;@key long subject_id;string text;long count;
}
@topic
注释说明:该类型可以与某一个Topic进行绑定,用作OpenDDS的传输类型。
@key
注释说明:subject_id字段被定义为键值。键值的作用是用来区分同一个topic下的不同的instance。
简单理解DDS中关于topic,instance和sample之间的关系,如图
同一个topic可以创建多个instance,不同的instance是按照key来进行区分的。而每一个instance可以理解为sample的模子,sample是实际的在节点间进行收发的数据。
OpenDDS Demo Code
简单如下:
OpenDDS 可扩展的传输框架
OpenDDS使用由DDS规范定义的IDL接口,以便于初始化以及控制服务使用。通过一个OpenDDS特有的传输框架,可以实现数据传输,而此框架可以允许服务利用各种传输协议,因此可称为可插拔的传输层,使得OpenDDS的架构具有很大的灵活性。
目前,OpenDDS支持TCP/IP、UDP/IP、IP多点发送、共享内存以及RTPS_UDP等多种传输协议,如图。传输协议可以通过配置文件指定,并在发布和订阅者进程中附于各种实体。
OpenDDS 发现
OpenDDS发现服务,一种是peer-peer的发现(RTPS的对等发现),该发现的特点是节点在启动前需要配置好我所关心节点的信息(IP)。另一种是与第一种相反的方式(DCPSInfoRepo的集中式发现),在整个OpenDDS的系统中,所有节点之间并不知道彼此的存在,在程序启动后,由程序去检索DCPSInfoRepo服务实现动态发现。
我理解为动态发现和静态发现。
- 信息仓库 (InfoRepo):集中式的储存库类型,其作为一个单独的进程运行,可以允许发布者和订阅者以集中式发现彼此。—动态发现
- RTPS发现:一种对等的发现类型,使用RTPS协议通知可用性和本地信息。 —静态发现
与其他DDS实现的互操作性必须使用对等方法,但只在OpenDDS部署中才有用。
利用DCPSInfoRepo的集中式发现(动态发现)
DCPSInfoRepo是OpenDDS执行的一种独立式服务,以便于实现集中式方法,他作为一个CORBA服务器进行实现。当用户请求关于一个主题的订阅时,DCPSInfoRepo就会定位主题,通知发布者目前有新的订阅者。当在非RTPS配置中使用OpenDDS时,就需要运行DCPSInfoRepo,而RTPS配置时则不需要使用DCPSInfoRepo。DCPSInfoRepo不包含在数据传播中,它的任务被限制在发现彼此的OpenDDS应用程序范围内。
应用程序使用者可利用DCPS域的非重叠性部分,灵活、自由地运行多个InfoRepo。
域操作可以在多个仓库上进行,从而形成一个分布式虚拟仓库,即仓库联盟(Repository Federation)。为了使每个仓库参与到联盟中,每个仓库都必须在启动时指定它自己的联盟标识符数值(一个32位的数字值)。
利用RTPS的对等发现(静态发现)
需要对等发现模式的DDS应用程序可由OpenDDS性能设定,通过使用RTPS协议可以完成这种类型的发现。这个简单的发现形式可通过DDS对DataReader和DataWriter的配置进行实现。
当每个参与者的进程激活DDS-RTPS发现机制时,需要利用默认(或者配置)的网络端口,网络端点才能被创建,这样才能方便后续DDS参与者发布DataReader以及DataWriter的详细配置信息。一段时间后,各个节点就会基于所配置的、可插拔的传输协议,发现彼此并创建一个连接。
当开发并部署需要使用RTPS发现的应用程序时,开发人员需考虑以下限制因素:
- 由于UDP端口的方式被分配给域ID,那么,域ID应当在0~231(包含231)之间。在每个OpenDDS进程、每个域中,支持多达120个域参与者。
- 主题名称以及类型识别码被限制到256个字符。
- 由于全局唯一标识符(GUID)的方式被指定,OpenDDS的本地多点发送传输不能与RTPS发现一并工作(如果试图这样,那么将发布一个警告信息)。
这篇关于什么是OpenDDS???What is OpenDDS???开源项目???的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!