日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenDDS开发指南V3.20】第一章:介绍

發(fā)布時間:2023/12/10 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenDDS开发指南V3.20】第一章:介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


OpenDDS 是用于實(shí)時系統(tǒng)規(guī)范 v1.4(OMG Document formal/2015-04-10)的 OMG 數(shù)據(jù)分發(fā)服務(wù) (DDS) 和實(shí)時發(fā)布訂閱有線協(xié)議DDS Interoperability Wire Protocol Specificatio (DDSI- RTPS)v2.3(OMG Document formal/2019-04-03)。

OpenDDS 還實(shí)現(xiàn)了 DDS 安全規(guī)范 v1.1(OMG Document formal/2018-04-01)和 DDS XTypes v1.3(OMG Document formal/2020-02-04)。

OpenDDS 由 Object Computing, Inc. (OCI) 贊助,可在 https://www.opendds.org/ 獲得。本開發(fā)人員指南基于 OpenDDS 的 3.20 版本。

DDS 定義了一種服務(wù),用于在分布式應(yīng)用程序的參與者之間有效地分發(fā)應(yīng)用程序數(shù)據(jù)。此服務(wù)不綁定到 CORBA。該規(guī)范提供了一個平臺獨(dú)立模型 (PIM) 以及一個將 PIM 映射到 OMG IDL 實(shí)現(xiàn)的平臺特定模型 (PSM)。

有關(guān) DDS 的更多詳細(xì)信息,開發(fā)人員應(yīng)參考 DDS 規(guī)范(OMG Document formal/2015-04-10),因?yàn)樗瑢λ蟹?wù)功能的深入介紹。

注意:OpenDDS 當(dāng)前實(shí)現(xiàn)了 OMG DDS 1.4 版規(guī)范。 有關(guān)更多信息,請參閱 https://www.opendds.org/ 中的合規(guī)信息。

DCPS 概述

在本節(jié)中,我們將介紹 DCPS 層的主要概念和實(shí)體,并討論它們?nèi)绾谓换ズ蛥f(xié)同工作。

基本概念

圖 1-1 顯示了 DDS DCPS 層的概覽。 以下小節(jié)定義了此圖中顯示的概念。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-VcUUwFh1-1652410199857)(https://note.youdao.com/yws/res/2874/WEBRESOURCE8b0550fd5df1608881ecff7b6d1cbb7d)]

Domain(域)

Domain是 DCPS 中的基本劃分單元。

每個其他實(shí)體都屬于一個Domain,并且只能與同一Domain中的其他實(shí)體交互。

應(yīng)用程序代碼可以自由地與多個Domain交互,但必須通過屬于不同Domain的單獨(dú)實(shí)體來進(jìn)行。

DomainParticipant(域參與者)

域參與者是應(yīng)用程序在特定域中交互的入口點(diǎn)。

域參與者是許多涉及寫入或讀取數(shù)據(jù)的對象的工廠。

Topic

主題是發(fā)布和訂閱應(yīng)用程序之間交互的基本方式。

每個主題在域中都有一個唯一的名稱和它發(fā)布的特定數(shù)據(jù)類型。

每個主題數(shù)據(jù)類型都可以指定零個或多個構(gòu)成其鍵的字段。發(fā)布數(shù)據(jù)時,發(fā)布過程始終指定主題。 訂閱者通過主題請求數(shù)據(jù)。

在 DCPS 術(shù)語中,您針對某個主題的不同實(shí)例發(fā)布單獨(dú)的數(shù)據(jù)樣本。每個實(shí)例都與鍵的唯一值相關(guān)聯(lián)。 發(fā)布過程通過對每個樣本使用相同的鍵值,在同一實(shí)例上發(fā)布多個數(shù)據(jù)樣本。

DataWriter

發(fā)布應(yīng)用程序代碼使用數(shù)據(jù)寫入器將值傳遞給 DDS。每個數(shù)據(jù)編寫器都綁定到一個特定的主題。

應(yīng)用程序使用數(shù)據(jù)編寫器的類型特定接口發(fā)布關(guān)于該主題的示例。 數(shù)據(jù)寫入者負(fù)責(zé)編組數(shù)據(jù)并將其傳遞給發(fā)布者進(jìn)行傳輸。

Publisher(發(fā)布者)

發(fā)布者負(fù)責(zé)獲取發(fā)布的數(shù)據(jù)并將其傳播給域中的所有相關(guān)訂閱者。 所采用的確切機(jī)制留給服務(wù)實(shí)現(xiàn)。

Subscriber(訂閱者)

訂閱者從發(fā)布者接收數(shù)據(jù)并將其傳遞給與其連接的任何相關(guān)數(shù)據(jù)讀取器。

DataReader(數(shù)據(jù)讀取器)

數(shù)據(jù)讀取器從訂閱者那里獲取數(shù)據(jù),將其分解為適合該主題的類型,然后將樣本交付給應(yīng)用程序。 每個數(shù)據(jù)閱讀器都綁定到一個特定的主題。 應(yīng)用程序使用數(shù)據(jù)讀取器的特定類型接口來接收樣本。

Built-In Topics(內(nèi)置主題)

DDS 規(guī)范定義了許多內(nèi)置于 DDS 實(shí)現(xiàn)的主題。

訂閱這些內(nèi)置主題使應(yīng)用程序開發(fā)人員可以訪問正在使用的域的狀態(tài),包括注冊了哪些主題、連接和斷開了哪些數(shù)據(jù)讀取器和數(shù)據(jù)寫入器,以及各種實(shí)體的 QoS 設(shè)置。

訂閱時,應(yīng)用程序會收到指示域內(nèi)實(shí)體更改的樣本。 下表顯示了 DDS 規(guī)范中定義的內(nèi)置主題:

Topic NameDescription
DCPSParticipant每個實(shí)例代表一個域參與者
DCPSTopic每個實(shí)例代表一個普通(非內(nèi)置)主題
DCPSPublication每個實(shí)例代表一個數(shù)據(jù)寫入器
DCPSSubscription每個實(shí)例代表一個數(shù)據(jù)讀取器

服務(wù)質(zhì)量政策

DDS 規(guī)范定義了許多服務(wù)質(zhì)量 (QoS) 策略,應(yīng)用程序使用這些策略來指定其對服務(wù)的 QoS 要求。

參與者指定他們需要從服務(wù)中獲得什么行為,而服務(wù)決定如何實(shí)現(xiàn)這些行為。

這些策略可以應(yīng)用于各種 DCPS實(shí)體(主題、數(shù)據(jù)寫入器、數(shù)據(jù)讀取器、發(fā)布者、訂閱者、域參與者),盡管并非所有策略都對所有類型的實(shí)體都有效。

訂閱者和發(fā)布者使用請求與提供 (RxO) 模型進(jìn)行匹配。

訂閱者請求一組最低要求的策略。 發(fā)布者向潛在訂閱者提供一組 QoS 策略。 然后,DDS 實(shí)現(xiàn)嘗試將請求的策略與提供的策略匹配; 如果這些策略是兼容的,那么就形成了關(guān)聯(lián)。

OpenDDS 目前實(shí)施的策略將在第 3 章詳細(xì)討論。

監(jiān)聽

DCPS 層為每個實(shí)體定義了一個回調(diào)接口,允許應(yīng)用程序進(jìn)程“監(jiān)聽”與該實(shí)體相關(guān)的某些狀態(tài)更改或事件。 例如,當(dāng)有數(shù)據(jù)值可供讀取時,會通知數(shù)據(jù)讀取器偵聽器。

條件

條件和等待集允許在 DDS 中檢測感興趣的事件時替代偵聽器。

一般模式是應(yīng)用程序創(chuàng)建特定類型的 Condition 對象,例如 StatusCondition,并將其附加到 WaitSet。

  • 應(yīng)用程序在 WaitSet 上等待,直到一個或多個條件變?yōu)檎妗?/p>

  • 應(yīng)用程序調(diào)用對相應(yīng)實(shí)體對象的操作以提取必要的信息。

  • DataReader 接口還具有采用ReadCondition 參數(shù)的操作。

  • QueryCondition 對象作為 ContentSubscription Profile 實(shí)現(xiàn)的一部分提供。 QueryCondition 接口擴(kuò)展了 ReadCondition 接口。

penDDS 實(shí)施

規(guī)范

OpenDDS 符合 OMG DDS 和 OMG DDSI-RTPS 規(guī)范。
該合規(guī)性的詳細(xì)信息如下。 OpenDDS 還實(shí)現(xiàn)了 OMG DDS 安全規(guī)范。 符合該規(guī)范的詳細(xì)信息在第 14.8 節(jié)中。

XTypes 合規(guī)性的詳細(xì)信息在第 16.8 和 16.9 節(jié)中。

DDS 規(guī)范

DDS 規(guī)范的第 2 節(jié)定義了 DDS 實(shí)施的五個合規(guī)點(diǎn):

  • 最低配置文件
  • 內(nèi)容訂閱配置文件
  • 持久性配置文件
  • 所有權(quán)概況
  • 對象模型配置文件
  • OpenDDS 符合整個 DDS 規(guī)范(包括所有可選配置文件)。 這包括實(shí)施所有服務(wù)質(zhì)量政策,并附有以下說明:

    • RELIABILITY.kind = RELIABLE 受RTPS_UDP 傳輸、TCP 傳輸或IP 多播傳輸(配置為可靠時)支持。
    • TRANSPORT_PRIORITY 未實(shí)現(xiàn)為可更改的。 盡管 DDS 規(guī)范的 1.5 版尚未發(fā)布,但 OpenDDS 包含了為該版本計(jì)劃的一些更改,這些更改是穩(wěn)健實(shí)施所需的:
      • DDS15-257:IDL 類型 BuiltinTopicKey_t 是一個包含
        16 個八位字節(jié)的數(shù)組
    DDSI-RTPS 規(guī)范

    OpenDDS 實(shí)現(xiàn)符合 OMG DDSI-RTPS 規(guī)范的要求。

    OpenDDS RTPS 實(shí)施說明

    OMG DDSI-RTPS 規(guī)范(formal/2019-04-03)提供了實(shí)施聲明,但并非合規(guī)性要求。 在使用 OpenDDS RTPS 功能進(jìn)行傳輸和/或發(fā)現(xiàn)時,應(yīng)考慮以下事項(xiàng)。

    DDSI-RTPS 規(guī)范的章節(jié)編號隨每個項(xiàng)目一起提供,以供進(jìn)一步參考。
    OpenDDS 中未實(shí)現(xiàn)的項(xiàng)目:

  • Writer端內(nèi)容過濾(8.7.3)
    OpenDDS 可能仍然會丟棄任何相關(guān)閱讀器不需要的樣本(由于內(nèi)容過濾)——這是在傳輸層之上完成的
  • PRESENTATION QoS (8.7.5) 的相干集
  • 定向?qū)懭?(8.7.6)
    – OpenDDS 將使用 Directed Write 參數(shù),如果它出現(xiàn)在傳入消息中(例如,由不同 DDS 實(shí)現(xiàn)生成的消息)
  • 屬性列表 (8.7.7)
  • DURABLE 數(shù)據(jù) (8.7.8) 的原始寫入者信息——這將僅用于 RTPS 規(guī)范 (8.7.2.2.1) 不支持的瞬態(tài)和持久性持久性
  • Key Hashes (8.7.9) 不會生成,但它們是可選的
  • nackSuppressionDuration(表8.47)和heartbeatSuppressionDuration(表8.62)。
  • IDL 規(guī)范

    OMG IDL 在 OpenDDS 代碼庫和下游以幾種不同的方式使用
    使用它的地方:

    • OpenDDS 附帶的文件(例如 dds/DdsDcpsTopic.idl)定義了中間件庫和應(yīng)用程序之間的 API 部分。 這稱為 OMG IDL 平臺特定模型 (PSM)。
    • 除了 C++ 或 Java 的源代碼文件之外,OpenDDS 的用戶還可以編寫 IDL 文件。

    本節(jié)只描述后者的使用。

    IDL 規(guī)范(4.2 版)使用術(shù)語“構(gòu)建塊”來定義某些工具可能支持的整個 IDL 語法的子集。

    OpenDDS 支持以下構(gòu)建塊,下面列出了注釋/警告:

    • 核心數(shù)據(jù)類型
      • 對“固定”數(shù)據(jù)類型(定點(diǎn)小數(shù))的支持不完整。
    • 匿名類型
      • 當(dāng)匿名類型作為序列/數(shù)組實(shí)例直接作為結(jié)構(gòu)字段類型出現(xiàn)時,對匿名類型的支持有限。 建議使用顯式命名的類型。
    • 注釋
      • 有關(guān)支持的內(nèi)置注釋的詳細(xì)信息,請參閱第 2.1.1 和 16.6 節(jié)。
      • 還支持用戶定義的注釋類型。
    • 擴(kuò)展數(shù)據(jù)類型
    • 整數(shù)類型 int8、int16、int32 和 int64 以及無符號版本
    • 支持它們,例如 uint32。
    • 不支持構(gòu)建塊的其余部分。

    DDS 規(guī)范的擴(kuò)展

    DDS IDL 模塊(C++ 命名空間、Java 包)中的數(shù)據(jù)類型、接口和常量直接對應(yīng)于 DDS 規(guī)范,只有極少數(shù)例外:
    ? DDS::SampleInfo 包含一個以“opendds_reserved”開頭的額外字段
    ? 特定類型的DataReader(包括那些用于內(nèi)置主題的)具有額外的操作read_instance_w_condition() 和take_instance_w_condition()。

    OpenDDS 模塊/命名空間/包中的各種類和接口提供了額外的擴(kuò)展行為。 其中包括 Recorder 和 Replayer 等功能(參見第 12 章)以及:
    ? OpenDDS::DCPS::TypeSupport 添加了 DDS 規(guī)范中沒有的 unregister_type() 操作。
    ? OpenDDS::DCPS::ALL_STATUS_MASK、NO_STATUS_MASK 和 DEFAULT_STATUS_MASK 是 DDS::Entity、DDS::StatusCondition 和各種 create_*() 操作使用的 DDS::StatusMask 類型的有用常量。

    OpenDDS 架構(gòu)

    本節(jié)簡要概述了 OpenDDS 的實(shí)現(xiàn)、它的特性以及它的一些組件。 $DDS_ROOT 環(huán)境變量應(yīng)該指向 OpenDDS 發(fā)行版的基本目錄。 OpenDDS 的源代碼可以在 $DDS_ROOT/dds/ 目錄下找到。 DDS 測試可以在 $DDS_ROOT/tests/ 下找到。

    設(shè)計(jì)理念

    OpenDDS 實(shí)現(xiàn)和 API 基于對 OMG IDL PSM 的相當(dāng)嚴(yán)格的解釋。

    在幾乎所有情況下,OMG 的 IDL-to-C++ 語言映射都用于定義 DDS 規(guī)范中的 IDL 如何映射到 OpenDDS 向客戶端公開的 C++ API。

    與 OMG IDL PSM 的主要偏差是本地接口用于實(shí)體和各種其他接口。 這些在 DDS 規(guī)范中被定義為不受約束的(非本地)接口。 將它們定義為本地接口可以提高性能,減少內(nèi)存使用,簡化客戶端與這些接口的交互,并使客戶端更容易構(gòu)建自己的實(shí)現(xiàn).

    可擴(kuò)展傳輸框架 (ETF)

    OpenDDS 使用 DDS 規(guī)范定義的 IDL 接口來初始化和控制服務(wù)的使用。

    數(shù)據(jù)傳輸是通過特定于 OpenDDS 的傳輸框架完成的,該框架允許服務(wù)與各種傳輸協(xié)議一起使用。

    這被稱為可插拔傳輸,并使 OpenDDS 的可擴(kuò)展性成為其架構(gòu)的重要組成部分。 OpenDDS 目前支持 TCP/IP、UDP/IP、IP 多播、共享內(nèi)存和 RTPS_UDP 傳輸協(xié)議,如圖 1-2 所示。

    傳輸通常通過配置文件指定,并附加到發(fā)布者和訂閱者進(jìn)程中的各種實(shí)體。 有關(guān)配置 ETF 組件的詳細(xì)信息,請參閱第 7.4.4 節(jié)

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-iJVPmlo9-1652410199858)(https://note.youdao.com/yws/res/2971/WEBRESOURCE0f1e9d5a37f72b244d07554ab3b0cd27)]

    ETF 使應(yīng)用程序開發(fā)人員能夠?qū)崿F(xiàn)他們自己的定制傳輸。 實(shí)現(xiàn)自定義傳輸涉及專門化傳輸框架中定義的許多類。

    udp 傳輸提供了開發(fā)人員在創(chuàng)建自己的實(shí)現(xiàn)時可以使用的良好基礎(chǔ)。 有關(guān)詳細(xì)信息,請參閱 $DDS_ROOT/dds/DCPS/transport/udp/ 目錄。

    DDS Discovery

    DDS 應(yīng)用程序必須通過某個中央代理或某個分布式方案來發(fā)現(xiàn)彼此。

    OpenDDS 的一個重要特性是 DDS 應(yīng)用程序可以配置為使用 DCPSInfoRepo 或 RTPS 發(fā)現(xiàn)來執(zhí)行發(fā)現(xiàn),但在數(shù)據(jù)寫入器和數(shù)據(jù)讀取器之間使用不同的傳輸類型進(jìn)行數(shù)據(jù)傳輸。

    DDS 規(guī)范(正式/2015-04-10)將發(fā)現(xiàn)的細(xì)節(jié)留給實(shí)現(xiàn)。

    在 DDS 實(shí)現(xiàn)之間的互操作性的情況下,OMG DDSI-RTPS(正式/2014-09-01)規(guī)范提供了對等發(fā)現(xiàn)風(fēng)格的要求。

    OpenDDS 提供了兩個發(fā)現(xiàn)選項(xiàng):

  • 信息存儲庫:一種集中式存儲庫樣式,作為一個單獨(dú)的進(jìn)程運(yùn)行,允許發(fā)布者和訂閱者集中發(fā)現(xiàn)彼此或
  • RTPS 發(fā)現(xiàn):一種點(diǎn)對點(diǎn)的發(fā)現(xiàn)方式,它利用 RTPS 協(xié)議來宣傳可用性和位置信息。與其他 DDS 實(shí)現(xiàn)的互操作性必須利用對等方法,但在僅 OpenDDS 的部署中可能很有用。
  • DCPSInfoRepo 的集中式發(fā)現(xiàn)

    OpenDDS 實(shí)現(xiàn)了一個名為 DCPS 信息存儲庫 (DCPSInfoRepo) 的獨(dú)立服務(wù)來實(shí)現(xiàn)集中式發(fā)現(xiàn)方法。

    它被實(shí)現(xiàn)為 CORBA 服務(wù)器。

    當(dāng)客戶請求訂閱某個主題時,DCPS 信息庫會定位該主題并通知任何現(xiàn)有發(fā)布者新訂閱者的位置。每當(dāng)在非 RTPS 配置中使用 OpenDDS 時,都需要運(yùn)行 DCPSInfoRepo 進(jìn)程。

    RTPS 配置不使用 DCPSInfoRepo。 DCPSInfoRepo 不參與數(shù)據(jù)傳播,其作用僅限于發(fā)現(xiàn)彼此的 OpenDDS 應(yīng)用程序。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-b68Jxii6-1652410199858)(https://note.youdao.com/yws/res/2983/WEBRESOURCEb3ef55e501340bf47c2752d76a29db3f)]

    應(yīng)用程序開發(fā)人員可以自由運(yùn)行多個信息存儲庫,每個存儲庫管理自己的非重疊 DCPS 域集。

    還可以使用多個存儲庫來操作域,從而形成分布式虛擬存儲庫。 這稱為存儲庫聯(lián)合。 為了讓各個存儲庫參與聯(lián)合,每個存儲庫都必須在啟動時指定自己的聯(lián)合標(biāo)識符值(32 位數(shù)值)。 有關(guān)存儲庫聯(lián)合的更多信息,請參見 9.2。

    使用 RTPS 的點(diǎn)對點(diǎn)發(fā)現(xiàn)

    OpenDDS 功能可以滿足需要對等發(fā)現(xiàn)模式的 DDS 應(yīng)用程序。

    這種發(fā)現(xiàn)方式只能通過使用當(dāng)前版本的 RTPS 協(xié)議來完成。

    這種簡單的發(fā)現(xiàn)形式是通過對運(yùn)行在應(yīng)用程序進(jìn)程中的 DDS 應(yīng)用程序數(shù)據(jù)讀取器和數(shù)據(jù)寫入器的簡單配置來完成的,如圖 1-4 所示。

    當(dāng)每個參與進(jìn)程為其數(shù)據(jù)讀取器和寫入器激活 OpenDDS 中的 DDSI-RTPS 發(fā)現(xiàn)機(jī)制時,使用默認(rèn)或配置的網(wǎng)絡(luò)端口創(chuàng)建網(wǎng)絡(luò)端點(diǎn),以便 DDS 參與者可以開始宣傳其數(shù)據(jù)讀取器和數(shù)據(jù)寫入器的可用性。

    一段時間后,那些根據(jù)標(biāo)準(zhǔn)相互尋找的人將找到彼此,并根據(jù)可擴(kuò)展傳輸框架 (ETF) 中討論的配置的可插拔傳輸建立連接。在第 7.4.1.1 節(jié)和第 7.4.5.5 節(jié)中討論了這種靈活配置方法的更詳細(xì)描述。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-dGl90RQQ-1652410199858)(https://note.youdao.com/yws/res/2991/WEBRESOURCE97d86e139a72c587a19c7a3ec93069db)]

    以下是開發(fā)人員在開發(fā)和部署使用 RTPS 發(fā)現(xiàn)的應(yīng)用程序時需要考慮的其他實(shí)施限制:

  • 由于 UDP 端口分配給域 ID 的方式,域 ID 應(yīng)介于 0 和 231(含)之間。 在每個 OpenDDS 流程中,每個域最多支持 120 個域參與者。
  • 主題名稱和類型標(biāo)識符限制為 256 個字符。
  • 由于 GUID 的分配方式,OpenDDS 的本機(jī)多播傳輸不適用于 RTPS 發(fā)現(xiàn)(如果嘗試這樣做,將發(fā)出警告)。
  • 有關(guān) RTPS 發(fā)現(xiàn)如何發(fā)生的更多詳細(xì)信息,可以在實(shí)時發(fā)布-訂閱有線協(xié)議 DDS 互操作性有線協(xié)議規(guī)范 (DDSI-RTPS) v2.2 的第 8.5 節(jié)中找到非常好的閱讀參考(OMG 文件正式/2014-09-01)。

    Threading

    OpenDDS 創(chuàng)建自己的 ORB(當(dāng)需要時)以及運(yùn)行該 ORB 的單獨(dú)線程。

    它還使用自己的線程來處理傳入和傳出的傳輸 I/O。創(chuàng)建一個單獨(dú)的線程以在意外連接關(guān)閉時清理資源。

    您的應(yīng)用程序可能會通過 DCPS 的偵聽器機(jī)制從這些線程中回調(diào)。通過 DDS 發(fā)布樣本時,OpenDDS 通常會嘗試使用調(diào)用線程將樣本發(fā)送給任何連接的訂閱者。如果發(fā)送調(diào)用阻塞,則樣本可能會排隊(duì)等待在單獨(dú)的服務(wù)線程上發(fā)送。此行為取決于第 3 章中描述的 QoS 策略。

    訂閱者中的所有傳入數(shù)據(jù)都由服務(wù)線程讀取,并排隊(duì)等待應(yīng)用程序讀取。從服務(wù)線程調(diào)用 DataReader 偵聽器。

    配置

    OpenDDS 包括一個基于文件的配置框架,用于配置全局項(xiàng)目,例如調(diào)試級別、內(nèi)存分配和發(fā)現(xiàn),以及發(fā)布者和訂閱者的傳輸實(shí)現(xiàn)細(xì)節(jié)。配置也可以直接在代碼中實(shí)現(xiàn),但是,為了便于維護(hù)和減少運(yùn)行時錯誤,建議將配置外部化。完整的配置選項(xiàng)集在第 7 章中描述。

    Installation

    如何構(gòu)建 OpenDDS 的步驟可以在 $DDS_ROOT/INSTALL.md 中找到。

    要使用 DDS 安全性構(gòu)建 OpenDDS,請參閱下面的第 14.1 節(jié)。為避免編譯您不會使用的 OpenDDS 代碼,有些功能可以排除在構(gòu)建之外。

    下面討論這些特征。

    需要小尺寸配置或與面向安全的平臺兼容的用戶應(yīng)考慮使用 OpenDDS 安全配置文件,該配置文件在本指南的第 13 章中進(jìn)行了描述。

    啟用或禁用功能的構(gòu)建配置腳本支持大多數(shù)功能

    配置腳本創(chuàng)建具有正確內(nèi)容的配置文件,然后運(yùn)行MPC。

    如果您正在使用配置腳本,請使用“–help”命令行選項(xiàng)運(yùn)行它并查找您希望啟用/禁用的功能。如果您不使用配置腳本,請繼續(xù)閱讀以下有關(guān)直接運(yùn)行 MPC 的說明。對于下面描述的功能,MPC 用于啟用(默認(rèn))功能或禁用該功能。

    對于名為 feature 的功能,使用以下步驟從構(gòu)建中禁用該功能:

  • 對 MPC 使用命令行“功能”參數(shù):
  • mwc.pl -type <type> -features feature=0 DDS.mwc

    或者,將行 feature=0 添加到文件 $ACE_ROOT/bin/MakeProjectCreator/config/default.features 并使用 MPC 重新生成項(xiàng)目文件。

  • 如果您正在使用 gnuace MPC 項(xiàng)目類型(如果您將使用 GNU make 作為構(gòu)建系統(tǒng),就是這種情況),將行“feature=0”添加到文件 $ACE_ROOT/include/makeinclude/platform_macros.GNU。
  • 要顯式啟用該功能,請使用上面的 feature=1。

    注意:您還可以使用 $DDS_ROOT/configure 腳本來啟用或禁用功能。 要禁用該功能,請將 --no-feature 傳遞給腳本,以啟用 pass --feature。 在這種情況下,使用“-”而不是特征名稱中的“_”。 例如,要禁用下面討論的功能 content_subscription,請將 --no-content subscription 傳遞給配置腳本。

    禁用內(nèi)置主題支持的構(gòu)建

    功能名稱:built_in_topics

    通過禁用內(nèi)置主題支持,您可以將核心 DDS 庫的占用空間減少多達(dá) 30%。有關(guān)內(nèi)置主題的描述,請參見第 6 章。

    禁用合規(guī)配置文件功能的構(gòu)建

    DDS 規(guī)范定義了合規(guī)性配置文件,以提供一個通用術(shù)語來指示 DDS 實(shí)現(xiàn)可能支持或可能不支持的某些功能集。

    下面給出了這些配置文件,以及用于禁用對該配置文件或該配置文件組件的支持的 MPC 功能的名稱。

    許多配置文件選項(xiàng)涉及 QoS 設(shè)置。如果您嘗試使用與禁用的配置文件不兼容的 QoS 值,則會發(fā)生運(yùn)行時錯誤。如果配置文件涉及類,如果您嘗試使用該類并且配置文件被禁用,則會發(fā)生編譯時錯誤。

    內(nèi)容訂閱配置文件

    功能名稱:content_subscription 此配置文件添加了第 5 章中討論的類 ContentFilteredTopic、QueryCondition 和 MultiTopic。此外,可以使用下表中給出的功能排除單個類。

    ClassFeature
    ContentFilteredTopiccontent_filtered_topic
    QueryConditionquery_condition
    MultiTopicmulti_topic
    持久性配置文件

    功能名稱:persistence_profile

    此配置文件添加了 QoS 策略 DURABILITY_SERVICE 以及 DURABILITY QoS 策略類型的設(shè)置“TRANSIENT”和“PERSISTENT”。

    所有權(quán)概況

    功能名稱:ownership_profile

    此配置文件添加:
    ? OWNERSHIP 類型的設(shè)置“EXCLUSIVE”
    ? 支持 OWNERSHIP_STRENGTH 政策
    ? 為HISTORY QoS 策略設(shè)置深度> 1。

    注意:一些用戶可能希望排除對獨(dú)占 OWNERSHIP 策略及其關(guān)聯(lián)的 OWNERSHIP_STRENGTH 的支持,而不影響對 HISTORY 的使用。 為了支持這種配置,OpenDDS 還具有 MPC 特性 owner_kind_exclusive(配置腳本選項(xiàng) --no-ownership-kind-exclusive)。

    對象模型配置文件

    功能名稱:object_model_profile

    此配置文件包括對“GROUP”的 PRESENTATION access_scope 設(shè)置的支持。

    注意:目前,禁用 object_model_profile 時,也會排除“TOPIC”的 PRESENTATION access_scope。

    構(gòu)建使用 OpenDDS 的應(yīng)用程序

    本節(jié)適用于任何直接或間接包含 OpenDDS 標(biāo)頭的 C++ 代碼。 對于 Java 應(yīng)用程序,請參閱下面的第 10 章。 包含 OpenDDS 標(biāo)頭的 C++ 源代碼可以使用以下任一構(gòu)建系統(tǒng)構(gòu)建:MPC 或 CMake。

    MPC:Makefile、項(xiàng)目和工作區(qū)創(chuàng)建者

    OpenDDS 本身是使用 MPC 構(gòu)建的,因此設(shè)置為使用 OpenDDS 的開發(fā)系統(tǒng)已經(jīng)具有 MPC 可用。 OpenDDS 配置腳本創(chuàng)建一個帶有環(huán)境設(shè)置的“setenv”腳本(Windows 上的 setenv.cmd;Linux/macOS 上的 setenv.sh)。

    此環(huán)境包含使用 MPC 所需的 PATH 和 MPC_ROOT 設(shè)置。 MPC 的源代碼樹(在 MPC_ROOT 中)包含一個“docs”目錄,其中包含 HTML 和純文本文檔(USAGE 和 README 文件)。

    2.1 節(jié)中的示例演練使用 MPC 作為其構(gòu)建系統(tǒng)。 OpenDDS 源代碼樹包含許多使用 MPC 構(gòu)建的測試和示例。 這些可以用作應(yīng)用程序 MPC 文件的起點(diǎn)。

    cmake

    應(yīng)用程序也可以使用 CMake ( https://cmake.org) 構(gòu)建。

    請參閱 OpenDDS 源代碼樹中包含的文檔:docs/cmake.md

    OpenDDS 源代碼樹還包括使用 CMake 的示例。它們列在 cmake.md 文件中。

    自定義構(gòu)建系統(tǒng)

    強(qiáng)烈建議 OpenDDS 的用戶選擇上面列出的兩個選項(xiàng)之一(MPC 或 CMake),以便在任何受支持的平臺上生成一致的構(gòu)建文件。如果無法做到這一點(diǎn),OpenDDS 的用戶必須確保自定義構(gòu)建設(shè)置中的所有代碼生成器、編譯器和鏈接器設(shè)置都生成與 API 和 ABI 兼容的代碼。

    為此,請從 MPC 或 CMake 生成的項(xiàng)目文件(makefile 或 Visual Studio 項(xiàng)目文件)開始,并確保在自定義構(gòu)建系統(tǒng)中表示所有相關(guān)設(shè)置。這通常通過檢查項(xiàng)目文件和運(yùn)行帶有詳細(xì)輸出的構(gòu)建的組合來完成,以查看工具鏈(代碼生成器、編譯器、鏈接器)是如何被調(diào)用的。

    通過 https://objectcomputing.com/products/opendds/consultingsupport 聯(lián)系 Object Computing, Inc. (OCI),讓我們的專業(yè)軟件工程師為您解決此問題。

    總結(jié)

    以上是生活随笔為你收集整理的【OpenDDS开发指南V3.20】第一章:介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。