设计一个跨平台的通信接口

Posted

技术标签:

【中文标题】设计一个跨平台的通信接口【英文标题】:Designing a cross platform communication interface 【发布时间】:2013-06-04 18:29:42 【问题描述】:

我有一个在本地系统上运行的 C# 程序,它需要能够做两件事。

    在运行 Windows、Linux 或 android 的远程系统上异步分拆远程作业。 为这些系统提供一种将这些作业的输出(StdOut/StdErr)发回本地系统的方法。

以前我在与远程 Windows 系统通信时使用过 WCF。我在远程 Windows 系统上创建了一个 WCF 服务器,然后我的本地计算机可以通过该 WCF 通道发送命令和消息。当我尝试在 Linux 和 Android 上做同样的事情时,事情变得更加复杂。

我想我可以使用 REST 设置本地 WCF 服务,这样所有 3 个平台都可以使用任何方便的语言(最有可能是 c++)通过 JSON REST 向它发送消息。但是,那么完成要求 #1 的最佳方法是什么?

我应该费心用 C++ 创建一个在 Linux 和 Android 上运行的 REST 服务器吗? WCF 甚至可以使用不是用 .Net 编写的 C++ REST 服务器吗? 只使用 TCP 套接字做一些简单的事情会更好吗?

安全不是问题,因为它用于安全的专用网络。我只是在寻找运行远程命令/进程并从这些远程系统接收响应消息的最简单方法。

【问题讨论】:

【参考方案1】:

我使用 ZMQ 和 JSON 正是为了这个目的:创建一个自定义的专用网络拓扑,该拓扑使用 JSON 消息通过 TCP(通过 ZMQ)进行通信。当然,您可以使用任何序列化格式(我在下面列出了一些替代方案)。

我不能给你一个明确的“这是你应该做的”的答案,因为这个问题是相当开放的。

ZMQ:http://www.zeromq.org/ 非常不错的跨平台抽象套接字库 可以使用各种传输协议,包括 TCP 以纯字节数组的形式发送消息,由您选择序列化格式 一些序列化格式(按我个人喜好排序): JSON:http://www.json.org/ 消息包:http://msgpack.org/ 与 JSON 完全一样,但更紧凑 没有架构 跨平台 Google 协议缓冲区:https://code.google.com/p/protobuf/ 使用模式 绑定了 C++、C#、Java、Python(至少)

【讨论】:

【参考方案2】:

这实际上取决于您使用的基础架构和服务。如果您身处 Amazon Web Services 世界,您可以使用简单队列服务 (SQS) 来接收消息。然后,远程系统可以轮询队列并根据从 SQS 队列中提取的消息运行作业。

【讨论】:

以上是关于设计一个跨平台的通信接口的主要内容,如果未能解决你的问题,请参考以下文章

毕设作品基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)免费下载

论文参考ASP.NET基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)免费下载

采用接口版本号机制保障跨平台接口的一致性

基于CPCI系统的高速数字通信接口电路设计与应用

如何设计一个牛逼的API接口

产品经理如何设计API接口