2

我有 2 个必须进行通信的应用程序。这两个应用程序都在同一台计算机上,这就是我使用命名管道进行通信的原因。

我的问题是关于将要发送的数据。我有哪些选择?以下可能性是否可行?

  • 在 2 个应用程序之间发送字节
  • 发送 C 结构体
  • 发送一些协议缓冲区对象

如果还有其他想法,我很开放,我的目标是让一些东西真正快速实施。

4

3 回答 3

3

除非您需要非常高的性能,否则我会选择标准的跨语言服务通信语言,例如ThriftProtocol Buffer

如果有一天您必须与使用另一种语言的第三个应用程序进行通信,或者如果您决定在不同的机器上运行每个服务,这将允许您毫无问题地进行扩展。

于 2012-08-08T13:05:16.150 回答
1

实施起来真的很快,还是运行起来真的很快?

如果前者 - 使用 Web 服务,gsoap 或 WCF 将为您提供一个可以调用的简单接口。

如果是后者,您可能需要共享内存 - 将原始数据放在那里并允许其他进程将其读出。如果您有大量数据要传输,这就是要走的路。如果您的数量很少,那么您可以直接通过命名管道(或套接字,总是好的,易于使用,并且可以让您更轻松地迁移到多台机器)发送它。

要解释您正在传输的数据,请忘记尝试发送 C# 对象并让 C++ 端将其作为同一个对象读取,您将不得不处理原始数据。这意味着以某种格式序列化数据(二进制格式也可以很好地工作,并且比将其序列化为 XML 快得多)。然后另一方可以将其读入并将其反序列化为自己的数据结构。

于 2012-08-08T13:10:32.073 回答
1

一种选择:使用zeromq进行传输,使用 protobuf、thrift 甚至 json 作为通信语言。Zeromq 真的很快。

于 2012-08-08T16:17:18.737 回答