2011-10-20 42 views
6

我想評估一些技術,用於實現一些Ada模塊與一些C++/OpenGL模塊之間的通信過程。有一個(Windows XP)Ada應用程序使用COM與C++應用程序通信,但我打算將COM切換爲新技術。提出了一些建議,如直接套接字,DSA,Polyorb,Corba和DSS/Opensplice。Ada/C/++分佈式應用程序

  • DSA似乎只是阿達-implemented(不知道)
  • Polyorb都有其2006年最後落實,根據http://polyorb.ow2.org/
  • 的Corba有人argumented,這可能是不夠的簡單證明其複雜性實現簡單的應用程序
  • DSS/Opensplice似乎只是C/C++實現的,所以應該完成Ada綁定。它也似乎不是很容易實施。

就我個人而言,我喜歡COM,但由於遷移,我寧願採用套接字選項,由於其簡單,接口架構可以很容易地實現。

那麼,你覺得呢?您能否對這些技術發表評論,甚至建議其他更多?

非常感謝。

+4

在您陷入思考套接字「簡單」的陷阱之前,請考慮您必須在裸套接字層上構建的東西的數量,以支持高性能,靈活且可擴展的IPC機制。有關更多詳細信息,請參閱我的另一個問題的這個答案:http://stackoverflow.com/questions/6067538/restful-web-services-vs-socket-programming-for-a-data-intensive-application/6067635#6067635 –

+1

Polyorb似乎由AdaCore積極維護,並有相當新的更新。你可以通過http://libre2.adacore.com//viewvc/trunk/polyorb/ –

+1

來瀏覽版本庫,CORBA應該能夠做到,polyorb是一個選項,你也可以開發爲現有oRB的語言綁定,我們可以示例已經爲TAO創建了一個Ruby綁定,一個用於TAO的新的C++ 11綁定和一個用於JacORB的JRuby綁定。另請查看http://www.orbzone.org。如果您想使用DDS,請考慮爲OpenDDS創建Ada綁定(請參閱http://www.opendds.org/) –

回答

4

您選擇的一個重要因素是您正在重新設計的系統的規模和複雜性。它是一個分佈廣泛的系統,有很多複雜的信息?它是一個相對較小的系統,只有少量的世俗信息交換?

對於我以前只使用自己的基於套接字的通信模塊的小型系統。不過,現在我更傾向於ZeroMQ(無券商)或STOMP(基於文本)。還有一些Ada支持這些,zeromq-AdaTOMI_4_Ada(同時支持)。

雖然這些處理分配機制,你仍然需要處理的消息序列化爲可移動的形式。

CORBA/PolyORB和DDS解決方案相當重量級,但卻是完整的解決方案。如果您不擔心IDL和管理經紀人,那麼他們可以爲大型分佈式系統做好。是的,可能需要構建一些Ada綁定,但如果您可以獲得C頭文件或C API來綁定,那麼如果您只關注僅需綁定所需的函數和數據結構,那麼通常不會太糟糕。不是創建一個全面的綁定,而是自由地使用不透明和空洞的指針(void_ptr,opaque_structure_def_ptr)來表示您不關心的內部內容的結構和參數。

+0

我查看了zeromq-Ada,這聽起來很有趣。代碼已打開,但如果需要的話,可以提供支持。謝謝Marc。 – Rego

1

你的列表的另一個選項應該是使用Ada的distributed programming support,並編寫C/C++包裝來將你的C++程序連接到它。

我不知道它的最佳選項是否滿足您的需求,但是如果您的Ada編譯器支持附錄E,它應該在列表中。

+0

我會檢查附錄E.我想我的編譯器支持它。感謝TED。 – Rego

+0

實際上,當我最後一次檢查時(不可否認,不久前),很少有Ada編譯器支持該特定附件。但是,如果您碰巧遇到了這樣的情況,那麼您可能就會開展業務。 –

3

我們打算到COM切換到新的(支載)技術,因爲COM是不是更受微軟

誰告訴你的COM是不再支持是完全無能的支持。雖然COM在過去幾十年中經歷了許多名稱變更(OLE,COM,OLE自動化,DCOM,COM +,ActiveX,WinRT)和擴展,但它是MS平臺最重要的技術:過去,現在和將來。 The .NET runtime uses COM extensively。大多數的Win32 API都是用COM編寫的,而不是的部分將在Win8中,因爲WinRT components are COM objects

+0

那麼,剛剛發現爲什麼安裝SP3 Win XP後,我們框架中的幾個COM應用程序停止工作。如果我們沒有遷移到一個新的基於COM的.NET,我們的應用程序的幾個功能就會受到影響。對於安全/關鍵的sw,通信協議總是在升級(Windows頻繁)的情況下改變是不可接受的,那麼我們必須嘗試一種更穩定的方法。另外,Ada還有非常好的COM綁定的GNATCOM,它現在還沒有開發中。我讚賞你的意見,並同意COM有成功者,但你有什麼建議嗎?謝謝 – Rego

+0

@Rego:這些不是COM的繼承者,他們是COM。或者使用COM。任何遵循COM規則的代碼仍然有效,如果某些應用程序停止在XP SP3上工作,我只能認爲(1)他們使用了某些因安全原因被刪除的特定組件,或者(2)他們依賴無證行爲代替遵循成文規則。 –

+0

@Rego:另外,產品不再被開發的原因有多種。它可能被放棄,或者它可能是穩定的。這聽起來像GNATCOM是穩定的。 –

2

也看看AMQP(RabbitMQ服務器),似乎有Ada庫可用它http://www.gti-ia.upv.es/sma/tools/AdaBinding/index.php

如果您可以找到Ada綁定,Apache thrift也可能是一個輕量級選項。也許你甚至可以編寫自己的綁定,將自己的某些東西滾到套接字上應該不會更困難。

如果你去插座路線,比我建議ZeroMQ作爲「超級套路」。

+0

AMQP綁定「adaqpid」是非常小而脆弱的,IIRC,我最終放棄了試圖擴展其功能。此外,它是一個半分類的歸檔文件,還包括編輯器創建的最新備份文件版本(由多個文件名中的'〜'後綴指示),並且不包括*任何* README或編譯指南。在上面鏈接的TOMI_4_Ada中,我根據OpenAMQ的WireAPI做了自己的部分AMQP綁定。 –