2012-08-08 63 views
2

我有2个必须通信的应用程序。 这两个应用程序都在同一台计算机上,这就是为什么我使用命名管道进行通信的原因。什么类型的数据可以在C#和C++之间传输

我的问题是关于将要发送的数据。我有什么选择? 以下可能性是否可行? 2个应用程序之间

  • 发送字节
  • 发送C结构
  • 发送一些协议缓冲区对象

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

+1

你的意思是一个是C#和另一个C++,它们都在自己的进程中运行? – 2012-08-08 12:54:30

+1

如果这两个程序都是C或C++,那么发送原始C结构将是一个很好的选择,但在你的情况下,你必须使用某种形式的序列化。协议缓冲区提供了一种方法。 – 2012-08-08 12:56:21

+0

@SimonMourier是的,我将有2个应用程序运行在2个不同的过程。 – darkheir 2012-08-09 07:16:42

回答

3

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

如果有一天您必须与另一种语言的第三个应用程序通信,或者您决定在不同的计算机上运行每个服务,这将允许您扩展而不会出现问题。

+1

我打算这样做,因为我已经使用Thrift作为RPC功能与另一个组件,它应该很容易实现! – darkheir 2012-08-09 07:10:07

1

真的很快(为了你)执行,还是真的很快在操作?

如果前者 - 使用Web服务,gsoap或WCF将使您成为一个简单的界面,您可以调用。

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

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

1

一个选项: 使用zeromq运输,并protobuf,节俭甚至json作为通信语言。 Zeromq真的很快。

+0

Zeromq看起来真的很有趣,但我没有时间去学习一些新的东西,因为我的IPC必须在同一台计算机上,命名为pipe才是我的选择! – darkheir 2012-08-09 07:13:05

相关问题