2009-07-13 93 views
1

在我的應用程序中,我有兩個DLL。一個用C#編寫,另一個用C++編寫。他們通過網絡相互溝通。每個對象實例都有一個預期在任何時間都彼此同步的對象實例列表。保持對象在網絡中同步?

什麼網絡庫可用於做到這一點?

+0

你爲什麼不能兩者都做的DLL用相同的語言? – kkaploon 2009-07-13 17:36:25

+0

有各種各樣的原因,我不會涉及。簡短的版本是,它不是我的決定:) – djcouchycouch 2009-07-13 18:01:46

+0

可以在兩個應用程序中假定Windows? – chrish 2009-07-13 19:13:06

回答

2

這實際上是一個相當難以正確完成的問題,因此有很多方法可以解決這個問題。我認爲最好的辦法是使用類似Protocol緩衝區的協議,它有一個c++c#庫。根據您的數據大小,您可以簡單地序列化整個數據對象,然後通過線路發送,然後在另一端對其進行反序列化,然後每當對象更改時重複此操作。

當然,如果雙方同時更改對象,則可能會遇到同步問題。在這種情況下,您可能必須執行類似Google Wave這樣的操作,併發送數據差異,並將這些更改合併在一起。

0

這是一個非常模糊的問題。

  • 首先,與 C++和c#一起工作的庫?不見得。
  • 二,「同步」如何? 誰有 兩者的變更優先權? 將會有什麼樣的鎖定?這都是 非常重要的規則,將是 高度特定於 類型的操作和規則您嘗試 去。
0

如果一切運行在Windows上,您可以使用DCOM

0

我不確定自己完全瞭解您的情況,但是我想知道您是否在談論確保客戶端和服務器在初始連接期間位於相同的接口版本。如果他們不是,那麼過時的一方可能會失敗或請求更新。這基本上就是MMORPG所做的。

0

有一個名爲Velocity的項目,它爲各種數據提供高度可擴展的內存中應用程序緩存。它僅適用於託管代碼。 C++託管代碼(或可以調用託管代碼)?這個項目是MSDN Magazine article

0

我不明白你的問題,尤其是你的意思是「同步」,但也許你只是投了一個寬網。我想扔ICE。這是一個輕量級,易於使用的支持C#和C++的CORBA版本。看它。它可能會或可能不會適用於您正在做的事情。

0

我不知道它是否正是你想到的,但我寫了一個系統(C++庫,可選的服務器進程)來處理這種事情。它包括用於C#,C++,C,Java和Python的客戶端API,它們都可以使用相同的數據序列化協議相互通信,因此適用於跨語言和/或跨平臺通信。這兩個進程可以直接相互通信,或者如果你想支持N個進程進行通信,你可以運行服務器,它可以將共享對象保存在其「中心位置」,讓不同的客戶端看到它們,一直在改變,廣播/多播消息給對方,等

的代碼全部開源(BSD),並且可以在這裏找到:

https://public.msli.com/lcs/muscle/