2010-07-23 56 views
3

我有一套C/C++中的函數,需要接受調用並將值返回給遠程位置的C/C++代碼,類似於Java平臺上的RMI。通過RMI,Java方法通過rmiregistry建立,並保留在內存中以接受請求。我在C/C++中尋找類似的功能,但我對所有的選項都有些困惑。 CORBA是否適用於這種情況,如果是這樣,這仍然是最好的技術,或者有更好的選擇。我已閱讀了關於XML-RPC,CORBA和其他一些內容,但我不確定哪些是我需要的。什麼是RMI的C版本

感謝您的幫助。

Mike

回答

5

這種類型的場景是CORBA的意圖,如果是這樣,這仍然是最好的技術使用或有更好的選擇。

是的,這是CORBA打算解決的問題。是否「最好」是主觀的和論證的。 :)我可以說,從我個人的經歷來看,我不會錯過我與CORBA的短暫經歷,並建議您探索其他選擇。

我已閱讀關於XML-RPC,CORBA和其他一些,但我不知道這些是我需要哪些。

你似乎知道,你正在尋找一個實現RMI(也經常被稱爲RPC)什麼技術。它不是內置於C/C++的。在Linux上有SunRPC。我還建議查看Google protocol buffers,它提供了序列化數據的機制以及定義RPC服務的接口。有several service implementations可用,但我沒有服務實現的經驗。

+0

謝謝大家的回覆。對於像我這樣的人來說,這是一個很大的幫助,對這個發展領域來說是新的。基於這裏的迴應,看起來SunRPC是明確的選擇。如果我可能會問,而且我不是在尋找明確的細節,只是泛泛而談。 SunRPC如何使用,我是否將應用程序設置爲守護程序(我使用的是Linux),然後使用SunRPC接受對此守護程序的調用?我打算做一些研究,但我還沒有看到關於不同部分如何協同工作的完整圖片。不過謝謝。 – user399540 2010-07-23 16:47:21

+0

@ mikeymo93:是的,這是一個準確的描述。您將定義一個RPC接口,使用'rpcgen'生成客戶端和服務器存根。然後編寫一個使用服務器存根處理RPC請求(實際上是一個守護進程)的服務器。然後是使用客戶端存根對客戶端進行請求的客戶端。 – Stephen 2010-07-23 17:10:31

+0

這裏有一個很好的小教程:http://www.krzyzanowski.org/rutgers/hw/rpc/index.html – Stephen 2010-07-23 17:13:05

0

在C或C++中沒有內置的方法來完成此操作。這就是說有幾個庫可以實現這一點。

如果你在Windows上,那麼最好的答案可能是DCOM,這是操作系統本身的一部分。我不確定其他平臺。

+1

從技術上講,沒有內置的方法可以做到這一點在Java中。雖然它是Java標準庫的一部分。 – 2010-07-23 04:24:04

+0

@Martin:標準庫的一部分將內置在我的書中。不需要單獨的語言語法;但它可以用於開箱即用。 – 2010-07-23 12:34:10

+0

它不是該語言的一部分,也不是標準庫中的一部分,但它仍然可以在C++中使用,因爲它是Windows操作系統的一部分(這是否被視爲內置)!事實上,我會說它比Java更容易,因爲Java所需的額外配置並不是比較簡單的! – 2010-07-23 14:36:01

1

在類Unix平臺上,您可能正在尋找Sun RPC(遠程過程調用)。

CORBA也是相關的,但對具有面向對象功能的語言具有更自然的綁定。

0

我建議要麼CORBA或任何Web服務庫中的可用

CORBA對你是一個合理的選擇(儘管它可能是有點老技術現在)。我以前的工作一直在使用CORBA好幾年。

我應該說,CORBA的學習曲線非常陡峭,您需要迎合大量額外的設置,但是一旦它完成正確,它就會變得流暢使用。 (這個問題真的需要一段時間才能正確使用它)

Webservice現在是一個事實上的工業標準,我相信C++會有一些合理的實現和庫。 CORBA覆蓋了比WS更多的功能,但這些功能很少用於簡單系統。

+0

感謝您的反饋,我聽到很多關於CORBA的信息,但是大家都說它已經是一種死硬的技術。值得學習嗎?或者花時間和精力投入時間去了解它是不值得的?對於Linux平臺,CORBA,SunRPC和XML-RPC是進程間通信的標準選擇? – user399540 2010-07-23 21:35:04