我有2個必須通信的應用程序。 這兩個應用程序都在同一臺計算機上,這就是爲什麼我使用命名管道進行通信的原因。什麼類型的數據可以在C#和C++之間傳輸
我的問題是關於將要發送的數據。我有什麼選擇? 以下可能性是否可行? 2個應用程序之間
- 發送字節
- 發送C結構
- 發送一些協議緩衝區對象
我如果有一些其他的想法開放,我的目標是讓一些真正快速實施。
我有2個必須通信的應用程序。 這兩個應用程序都在同一臺計算機上,這就是爲什麼我使用命名管道進行通信的原因。什麼類型的數據可以在C#和C++之間傳輸
我的問題是關於將要發送的數據。我有什麼選擇? 以下可能性是否可行? 2個應用程序之間
我如果有一些其他的想法開放,我的目標是讓一些真正快速實施。
除非您需要非常高的性能,否則我會選擇標準的跨語言服務通信語言,如或Protocol Buffer。
如果有一天您必須與另一種語言的第三個應用程序通信,或者您決定在不同的計算機上運行每個服務,這將允許您擴展而不會出現問題。
我打算這樣做,因爲我已經使用Thrift作爲RPC功能與另一個組件,它應該很容易實現! – darkheir 2012-08-09 07:10:07
真的很快(爲了你)執行,還是真的很快在操作?
如果前者 - 使用Web服務,gsoap或WCF將使您成爲一個簡單的界面,您可以調用。
如果是後者,您可能需要共享內存 - 將原始數據放在那裏,並允許其他進程讀取它。如果你有大量的數據要傳輸,這是一條路。如果你的數量較少,那麼你可以直接通過命名管道(或套接字,直接發送,總是很好,易於使用,並且可以讓你更輕鬆地遷移到多臺機器)。
要解釋您正在傳輸的數據,忘記嘗試發送C#對象並讓C++端將其作爲同一對象讀取,您將不得不處理原始數據。這意味着以某種格式串行化數據(一種二進制格式可以很順利地運行,並且比將其序列化爲XML要快得多)。然後另一端可以讀取它並將其解串成它自己的數據結構。
你的意思是一個是C#和另一個C++,它們都在自己的進程中運行? – 2012-08-08 12:54:30
如果這兩個程序都是C或C++,那麼發送原始C結構將是一個很好的選擇,但在你的情況下,你必須使用某種形式的序列化。協議緩衝區提供了一種方法。 – 2012-08-08 12:56:21
@SimonMourier是的,我將有2個應用程序運行在2個不同的過程。 – darkheir 2012-08-09 07:16:42