保持对象在网络中同步?

时间:2009-07-13 17:28:00

标签: c# c++ networking network-programming

在我的应用程序中,我有两个DLL。一个用C#编写,另一个用C ++编写。它们通过网络相互通信。每个都有一个对象实例列表,这些对象实例应始终彼此同步。

有哪些网络库可以执行此操作?

7 个答案:

答案 0 :(得分:2)

这实际上是一个相当难以正确完成的问题,因此,有很多方法可以解决它。我认为最好的方法是使用类似协议缓冲区的东西,它有c++c#库。根据数据的大小,您可以简单地序列化整个数据对象,并通过网络发送,然后在另一侧反序列化,然后在对象更改时重复此操作。

当然,如果双方同时更改对象,则可能会遇到同步问题。在这种情况下,您可能需要执行Google Wave之类的操作,并发送数据的差异,并将更改合并在一起。

答案 1 :(得分:1)

我不知道它是否正是你的想法,但我写了一个系统(带有可选服务器进程的C ++库)来处理这类事情。它包括用于C#,C ++,C,Java和Python的客户端API,它们都可以使用相同的数据序列化协议相互通信,因此适用于跨语言和/或跨平台通信。这两个进程可以直接相互通信,或者如果您想支持N个进程通信,您可以运行服务器,该服务器可以将共享对象保存在其“中心位置”,让各个客户端看到它们并在它们'时通知它们'已被更改,相互广播/多播消息等。

代码全部是开源的(BSD),可以在这里找到:

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

答案 2 :(得分:0)

这是一个非常含糊的问题。

  • 首先,一个适用于两者的库 c ++和c#?不太可能。
  • 第二,“同步”怎么样?谁有 进行更改时的优先级 二者皆是?你是什​​么类型的锁? 会有到位吗?这就是全部 非常重要的规则 高度具体的类型 您正在尝试的操作和规则 去吧。

答案 3 :(得分:0)

如果所有内容都在Windows上运行,您可以使用DCOM

答案 4 :(得分:0)

我不确定我是否完全了解您的情况,但我想知道您是否正在谈论确保客户端和服务器在初始连接期间处于相同的接口版本。如果他们不是,那么过时的一方可能会失败或要求更新。这基本上就是MMORPG所做的。

答案 5 :(得分:0)

有一个名为Velocity的项目,它“为各种数据提供高度可扩展的内存应用程序缓存。”它仅适用于托管代码。是C ++托管代码(还是可以调用托管代码)?

这是项目中的MSDN Magazine article

答案 6 :(得分:0)

我不明白你的问题,尤其是你所说的“同步”,但也许你只是在广泛的网络。

我抛出ICE。它是一个重量更轻,更易于使用的支持C#和C ++的CORBA版本。看它。它可能是也可能不是适用于你正在做的事情。