我有 2 个必须进行通信的应用程序。这两个应用程序都在同一台计算机上,这就是我使用命名管道进行通信的原因。
我的问题是关于将要发送的数据。我有哪些选择?以下可能性是否可行?
- 在 2 个应用程序之间发送字节
- 发送 C 结构体
- 发送一些协议缓冲区对象
如果还有其他想法,我很开放,我的目标是让一些东西真正快速实施。
我有 2 个必须进行通信的应用程序。这两个应用程序都在同一台计算机上,这就是我使用命名管道进行通信的原因。
我的问题是关于将要发送的数据。我有哪些选择?以下可能性是否可行?
如果还有其他想法,我很开放,我的目标是让一些东西真正快速实施。
除非您需要非常高的性能,否则我会选择标准的跨语言服务通信语言,例如Thrift或Protocol Buffer。
如果有一天您必须与使用另一种语言的第三个应用程序进行通信,或者如果您决定在不同的机器上运行每个服务,这将允许您毫无问题地进行扩展。
实施起来真的很快,还是运行起来真的很快?
如果前者 - 使用 Web 服务,gsoap 或 WCF 将为您提供一个可以调用的简单接口。
如果是后者,您可能需要共享内存 - 将原始数据放在那里并允许其他进程将其读出。如果您有大量数据要传输,这就是要走的路。如果您的数量很少,那么您可以直接通过命名管道(或套接字,总是好的,易于使用,并且可以让您更轻松地迁移到多台机器)发送它。
要解释您正在传输的数据,请忘记尝试发送 C# 对象并让 C++ 端将其作为同一个对象读取,您将不得不处理原始数据。这意味着以某种格式序列化数据(二进制格式也可以很好地工作,并且比将其序列化为 XML 快得多)。然后另一方可以将其读入并将其反序列化为自己的数据结构。
一种选择:使用zeromq进行传输,使用 protobuf、thrift 甚至 json 作为通信语言。Zeromq 真的很快。