【问题标题】:Keeping objects in sync across a network?在网络中保持对象同步?
【发布时间】:2009-07-13 17:28:00
【问题描述】:

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

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

【问题讨论】:

  • 为什么你不能用同一种语言做两个 DLL?
  • 原因有很多,我就不一一赘述了。简短的版本是这不是我的决定:)
  • 两个应用程序都可以假定Windows吗?
  • @chrish。是的,该应用程序将仅适用于 Windows

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


【解决方案1】:

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

当然,如果双方同时更改对象,您可能会遇到同步问题。在这种情况下,您可能需要像Google Wave 那样做,发送数据的差异,然后将更改合并在一起。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      • 首先,一个可以同时使用两者的库 c++和c#?不太可能。
      • 第二,“同步”如何?谁有 进行更改时的优先级 二者皆是?你是什​​么类型的锁 准备到位吗?这都是 非常重要的规则 高度特定的类型 您尝试的操作和规则 去吧。

      【讨论】:

      • 这个问题故意含糊不清,因为我不确定那里有什么。虽然我熟悉一些以游戏为中心的网络库,但我不知道哪些可用于更严肃的应用程序。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          这是该项目的MSDN Magazine article

          【讨论】:

          • 不幸的是,C++ 是非托管的。而且我认为它永远不会。
          【解决方案7】:

          我不明白你的问题,尤其是你所说的“同步”是什么意思,但也许你只是在撒网。

          我扔掉ICE。它是支持 C# 和 C++ 的更轻、更易于使用的 CORBA 版本。看它。它可能适用于您正在做的事情,也可能不适用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-10
            • 1970-01-01
            • 1970-01-01
            • 2010-11-01
            • 2015-06-15
            • 2012-07-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多