分布式系统--数据分发服务(DDS)

1. 简介

     DDS是基于发布/订阅模式的通信模型。发布/订阅中间件提供一种简单、直观的方式分发数据,它将创建和发送数据(数据发布者(Publisher))的软件与接收和使用数据(数据订阅者(Subscriber))的软件分离开。Publihser简单声明其发送意图并发布数据。Subscriber声明其接收意图,然后中间件自动传送数据

2. 实现过程

应用程序使用API建立实体(对象),以此建立彼此间的发布/订阅通信。需要建立的主要实体包含:
域(Domain)
域参与者(DomainParticipant)
数据写入者(DataWriter)
发布者(Publisher)
数据读取者(DataReader)
订阅者(Subscriber)

主题(Topic)            

分布式系统--数据分发服务(DDS)_第1张图片

        发送方使用的对象被称为Publisher和DataWriter,接收方使用的对象被称为Subscriber和DataReader。
应用程序使用DataWriter发送数据。DataWriter与单独主题相关联,用户可以在单独应用程序中拥有多个DataWriter和主题。另外,在单独应用程序中,用户可以为一个特定的主题拥有超过一个DataWriter。
Publisher是一个负责实际数据发送的DCPS对象。Publisher拥有和管理DataWriter。一个DataWriter仅可由一个Publisher拥有,而一个Publisher可以拥有多个DataWriter,因此,相同的Publisher可以为不同数据类型的很多不同主题发送数据,当用户代码在DataWriter上调用writer()方法时,数据样本被传送至网络上执行数据实际分发的Publisher对象。
应用程序使用DataReader访问DCPS上接收的数据。一个DataReader关联一个单独主题,用户可以在一个应用程序中拥有多个DataReader和主题。另外,在单独的应用程序中,用户可以为一个特定的主题拥有超过一个DataReader。

Subscriber是负责发布数据实际接收的DCPS对象。Subscriber拥有和管理DataReader。一个DataReader只能由一个单独Subscriber拥有,而一个Subscriber可以拥有很多DataReader。因此,相同的Subscriber可以为不同数据类型的很多不同主题接收数据。当数据被发送至应用程序时,它首先由Subscriber处理,数据样本随后被储存在适当的DataReader中。用户代码注册一个可在新数据到达时调用的监听器,或使用read()和take()方法积极轮询DataReader的新数据。

3. RTI DDS主要接口

1)DDS初始化,创建域参与者

DDS_ReturnCode_t rti_dds_init(intdomainId);

2)数据写入者初始化

       DDS_StringDataWriter*  rti_dds_create_datawriter(const char *topicName, const struct DDS_DataWriterListener* listener = NULL);

3)数据读取者初始化

DDS_StringDataReader *  rti_dds_create_datareader(const char *topicName, const struct DDS_DataReaderListener* listener = NULL);

4)字符流数据读取者句柄获取

DDS_StringDataReader * rti_dds_stringdatareader_narrow(DDS_DataReader *);

5)数据发布

DDS_ReturnCode_t rti_dds_stringdata_publish(DDS_StringDataWriter* self, const char*instance_data);

6)数据订阅

DDS_ReturnCode_t  rti_dds_stringdata_subscribe(DDS_StringDataReader*self, char* instance_data);

7)DDS域参与者实体释放

DDS_ReturnCode_t rti_dds_dispose();

4. VC工程配置

打开VC工程属性->配置属性。

1)       C/C++ ->常规->附加包含目录:

Ø  $(NDDSHOME)\include

Ø  $(NDDSHOME)\include\ndds

2)       C/C++ ->预处理器->预处理器定义:

Debug模式:

Ø  WIN32

Ø  RTI_WIN32

Ø  _DEBUG

Ø  _CONSOLE

Release模式:

Ø  WIN32

Ø  RTI_WIN32

Ø  _CONSOLE

3)       链接器->常规->附加库目录:

Ø  $(NDDSHOME)\lib\i86Win32VS2010

4)       链接器->输入->附加依赖项:

Debug模式:

Ø  nddsczd.lib

Ø  nddscorezd.lib

Ø  netapi32.lib

Ø  advapi32.lib

Ø  user32.lib

Ø  WS2_32.lib

Release模式:

Ø  nddscz.lib

Ø  nddscorez.lib

Ø  netapi32.lib

Ø  advapi32.lib

Ø  user32.lib

Ø  WS2_32.lib

5)       链接器->输入->忽略特定默认库

libcmtd

你可能感兴趣的:(分布式系统--数据分发服务(DDS))