我是DDS領域的新手,需要對此有所瞭解。DDS中的互操作性
如何發佈兩個供應商之間的共同主題以實現DDS的互操作性?
方案是: 假設有兩個供應商產品V1和V2。 V1有一個發佈者在主題T1上發佈。 V2希望訂閱此主題。訂戶(V2)如何知道存在主題T1?
我對域級有類似的疑問,訂戶是否知道它必須參與哪個域?
我正在使用OpenDDS。供應商之間
由於
我是DDS領域的新手,需要對此有所瞭解。DDS中的互操作性
如何發佈兩個供應商之間的共同主題以實現DDS的互操作性?
方案是: 假設有兩個供應商產品V1和V2。 V1有一個發佈者在主題T1上發佈。 V2希望訂閱此主題。訂戶(V2)如何知道存在主題T1?
我對域級有類似的疑問,訂戶是否知道它必須參與哪個域?
我正在使用OpenDDS。供應商之間
由於
互操作性是可能的,並且定期測試/由主供應商證明。
您將需要配置您的DDS實現以使用RTPS(我認爲RTPS2當前),而不是供應商可能使用的任何專有傳輸。這可能是默認啓用的。
在參與哪個域方面,您可以編程方式在特定域(與哪個域連接的域可能由配置文件控制)中創建域參與者,以及您的所有其他實體(發佈者,訂閱者等)創建然後屬於該域參與者,因此在該域中運作
要在@ rcs的答案上建立一點...您必須做的實際工作量取決於DDS實現(OpenDDS,RTI,Prismtech .. ),因爲他們會有不同的默認值。如果你在兩端使用相同的配置,那麼你的配置變得簡單很多,因爲默認值應該與域和RTPS一致。
您需要確保下列搭配:
這就是我現在能想到的,希望有所幫助。我發現DDS文檔是非常好的,特別是如果你知道什麼時候可以(以及什麼時候不能)使用任何供應商的文檔的答案來實現你的實現(例如:在RTI的文檔或論壇上找到答案,以及它是否適用於你的OpenDDS應用程序)。通常解決方案是相似的,但你會發現RTI支持最多,RTI + Prismtech擁有最好的文檔。
DDS RTPS協議交換髮現信息,以便參與同一個域(!)的不同應用程序知道誰在那裏以及他們提供/請求什麼。您需要確保這兩個應用程序使用相同的域ID(在域參與者上指定)。另外,由於某些實現允許使用不同的傳輸選項,因此請務必使用RTPS(有時稱爲DDSI)網絡。
RTPS規範包含從域ID到端口號的映射,所以如果來自不同供應商的應用程序使用相同的ID,它應該可以正常工作。然而,實現可能會用配置覆蓋端口號。
爲了儘量提高應用程序正常通信的機會,請確保它們使用相同的IDL數據模型。供應商有不同的方法來鍵入不完全匹配的進化/映射類型,並不是所有的人都實現XTypes規範(還)。
此外,由於某些實現比其他實現更嚴格,請確保您保持在規範的範圍內。這意味着主題名稱只應包含字母數字字符(我有時會看到':'來表示範圍,這是不允許的)。
供應商之間肯定無法正常工作的是瞬態/持久性或TCP上的通信,因爲兩者尚未標準化。 TRANSIENT_LOCAL應該可以工作。 TRANSIENT_LOCAL和TRANSIENT之間的區別在於,在TRANSIENT_LOCAL中,發佈者(作者)離開系統後數據不再對齊,而使用TRANSIENT時,數據仍然可用。
另請注意,對於供應商之間的API級別互操作性,最好的機會是使用新的isocpp API,因爲在我看過的供應商實現中,該API已經實現得非常一致。
希望有幫助!