2009-07-13 92 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/