2012-08-08 64 views
2

我有2個必須通信的應用程序。 這兩個應用程序都在同一臺計算機上,這就是爲什麼我使用命名管道進行通信的原因。什麼類型的數據可以在C#和C++之間傳輸

我的問題是關於將要發送的數據。我有什麼選擇? 以下可能性是否可行? 2個應用程序之間

  • 發送字節
  • 發送C結構
  • 發送一些協議緩衝區對象

我如果有一些其他的想法開放,我的目標是讓一些真正快速實施。

+1

你的意思是一個是C#和另一個C++,它們都在自己的進程中運行? – 2012-08-08 12:54:30

+1

如果這兩個程序都是C或C++,那麼發送原始C結構將是一個很好的選擇,但在你的情況下,你必須使用某種形式的序列化。協議緩衝區提供了一種方法。 – 2012-08-08 12:56:21

+0

@SimonMourier是的,我將有2個應用程序運行在2個不同的過程。 – darkheir 2012-08-09 07:16:42

回答

3

除非您需要非常高的性能,否則我會選擇標準的跨語言服務通信語言,如​​或Protocol Buffer

如果有一天您必須與另一種語言的第三個應用程序通信,或者您決定在不同的計算機上運行每個服務,這將允許您擴展而不會出現問題。

+1

我打算這樣做,因爲我已經使用Thrift作爲RPC功能與另一個組件,它應該很容易實現! – darkheir 2012-08-09 07:10:07

1

真的很快(爲了你)執行,還是真的很快在操作?

如果前者 - 使用Web服務,gsoap或WCF將使您成爲一個簡單的界面,您可以調用。

如果是後者,您可能需要共享內存 - 將原始數據放在那裏,並允許其他進程讀取它。如果你有大量的數據要傳輸,這是一條路。如果你的數量較少,那麼你可以直接通過命名管道(或套接字,直接發送,總是很好,易於使用,並且可以讓你更輕鬆地遷移到多臺機器)。

要解釋您正在傳輸的數據,忘記嘗試發送C#對象並讓C++端將其作爲同一對象讀取,您將不得不處理原始數據。這意味着以某種格式串行化數據(一種二進制格式可以很順利地運行,並且比將其序列化爲XML要快得多)。然後另一端可以讀取它並將其解串成它自己的數據結構。

1

一個選項: 使用zeromq運輸,並protobuf,節儉甚至json作爲通信語言。 Zeromq真的很快。

+0

Zeromq看起來真的很有趣,但我沒有時間去學習一些新的東西,因爲我的IPC必須在同一臺計算機上,命名爲pipe纔是我的選擇! – darkheir 2012-08-09 07:13:05

相關問題