2010-08-24 103 views
6

我正在編寫新硬件設備的軟件,我希望任何新的第三方應用程序能夠訪問它們,如果他們想。我應該使用CORBA,MessagePack RPC還是Thrift,還是其他的東西?

該軟件將是一個本機進程(C++),應該可以由第三方遊戲和希望支持該硬件設備的應用程序進行輪詢。這些第三方應用程序也應該能夠在訂閱的基礎上從本地進程接收事件。除了本地進程外,我還會爲第三方開發人員提供「連接器」庫,供他們可能選擇的所有平臺/語言(Java,C++,Python等)嵌入到他們的應用程序中,以便他們可以輕鬆地連接到設備幾乎沒有任何額外的代碼需要由他們寫。我想要定位所有桌面/筆記本電腦操作系統平臺,並且對我想要公開的功能有一個很好的概念,但理想情況下我不想太困擾(即,我希望它可以從客戶端和服務器進行優化擴展)觀點)。

我正在尋找可靠性前進,性能,可維護性前進,跨平臺/語言靈活性前進以及易於開發的順序。

我應該使用什麼?

CORBA,MessagePack-RPC,Thrift,還是其他什麼?

(我省略了ICE因爲它的許可)

+4

CORBA是*古代*。它也是重量級和過時的。幾乎肯定有更好的解決方案。 – skaffman 2010-08-24 16:05:39

+4

skaffman,古代,重量級和過時的形容詞不會讓我失望。每個ORB的內存容量只有幾兆字節,這對嵌入式系統來說可能不好,但對臺式電腦來說絕對不錯,而且性能很快。我關心性能速度,跨平臺靈活性,易於開發,可維護性和未來的可靠性。只要這些部門在整體上是最好的,不管別人「認爲」什麼都沒有關係,也不一定是「最新的時尚」,它會贏。我只是想知道這是否是對我所做的最好的。 – Navigateur 2010-08-24 22:33:06

+1

我們根本無法在不知道您的要求,您的軟件是/是,目標受衆,升級路徑,運行平臺等情況下回答這個開放式問題。 – 2010-08-25 23:49:05

回答

1

CORBA是目前唯一可以爲我的系統工作的免費「RPC」,儘管它的規模非常糟糕。節儉並不適合Windows。即使它仍在開發中,MessagePack-RPC在所有語言和操作系統中都不可用。如果CORBA具有優雅的可擴展性,它可能根本不會過時。

協議緩衝區和消息傳遞將工作,我必須爲每個平臺/語言開發一個客戶端和服務實現。它也將是非常可擴展的。我已經決定了。

+0

你爲什麼認爲CORBA「非常糟糕」?現在有很多使用CORBA的非常高容量的系統。 – 2010-08-27 23:45:42

+2

添加一個新的屬性,在CORBA中,當人們使用新的服務器使用舊客戶端時,或者使用舊版本服務器的新客戶端時(這兩者都可能在我的情況下),可以很好地處理這個屬性?我的印象是CORBA打破了。這很糟糕 - 它不一定是這種方式。如果CORBA無縫地處理附加和刪除屬性和功能,它將征服世界。人們希望始終更新其體系結構:任何所需的版本控制,約束和處理都應該是開發人員在CORBA之外的工作。 RPC本身應該是100%可伸縮/可去除的。 – Navigateur 2010-08-28 11:41:29

+1

很多RPC系統無縫處理版本控制。其中一個原因是它會在每一次CORBA調用中產生過多的開銷。 – 2010-08-30 00:07:56

2

如果古代和權重股不把你趕走,過時絕對應該。無論如何,我可以告訴你我們最近在工作中使用Google協議緩衝區的方式,而且它們非常易於使用。

從開發人員的角度來看,您只需構建GPB(其實並不困難),然後它會爲您生成源文件。最終的結果是跨平臺的二進制消息傳輸消息傳遞接口(思考XML和有限的RMI,而不是類MPI功能)。

我們在Windows上使用它來與運行相同軟件的基於Arm的Linux系統(來自嵌入式arm的TS-7200)進行通信。據我所知,它與許多語言兼容。

+0

這是消息嗎?很有意思!考慮到靈活性,你會如何推薦我在我的情況下使用protobuf?我知道這是「不管你喜歡什麼」,但我希望我的系統的每個新部分都能與每個舊部分向後兼容。 (這是展望未來 - 我還沒有開始)。達到這個目標的最佳方式是什麼? – Navigateur 2010-08-26 15:16:55

+0

如果您執行谷歌搜索,您可以在其回購中找到一些文檔,其中包含一些最佳做法。這真的取決於你的確切情況。這不是嚴格的信息;它是一種跨平臺/跨系統的二進制序列化方法。如果你只是爲了數據傳輸,你可以做到這一點。如果你想構建一個RMI框架,你可以做到這一點。 – 2010-08-26 18:36:22

4

節儉或消息包是未來的最佳選擇。兩者都非常時尚,重量輕,不會爲您的流程添加更多延遲。他們支持大多數通用語言,並且處於Active Development。在現階段,我寧願個人喜歡節儉,但消息包似乎承諾許多功能。

認爲節儉可能不像我們想要的那樣友好,但人們在窗戶上使用它。 這是一個在窗戶上節儉的入門指南。 http://wiki.apache.org/thrift/ThriftInstallationWin32 只有在Windows上安裝並獲取Thrift編譯器會很麻煩。使用生成的文件取決於您選擇的語言,許多語言通過導入節儉庫可以很好地支持運行這些文件。(Java中是很容易的,Maven構件)

還有根據我在RPC frameworks available?

CORBA上可用的RPC框架的討論是舊的麻煩,非常重量級的。

0

我目前正在使用Apache Thrift進行Hospital Manager項目。在許多領域它比CORBA要好,更不用說它是輕量級的,更容易實現和理解。 Thrift的學習曲線與CORBA相比絕對是微妙的,但Thrift的文檔是最糟糕的。

我正在使用Obj-C和Java客戶端連接的Ruby Thrift服務器。 Thrift解析器或「編譯器」在爲所需語言生成源文件方面做得相當不錯,儘管它太冗長了。如果我正在開始一個新項目,我肯定會考慮實施Thrift或Google ProtoBuffs,因爲CORBA確實過時了,未來可能不會實現新技術,更不用說有很多針對CORBA的漏洞和漏洞攻擊因爲它不在開發中,所以得到補丁,在你的新項目上出現一些嚴重的安全漏洞。在撰寫本文時,Thrift支持許多編程語言:C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Objective-C,JavaScript,Node.js,Smalltalk,OCaml和Delphi。我認爲,支持多種語言對於您的項目而言至關重要。

+1

最後我和ZeroMQ一起去了。你可能想看看它。這真的很酷,因爲你可以將它設置爲可擴展的(就添加/刪除屬性等而言)。 – Navigateur 2013-11-21 14:28:45