1

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

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

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

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

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

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

4

2 回答 2

2

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

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

  • ZMQ:http ://www.zeromq.org/
    • 非常好的跨平台抽象套接字库
    • 可以使用各种传输协议,包括 TCP
    • 将消息作为纯字节数组发送,由您选择序列化格式
  • 一些序列化格式(按我个人喜好排序):
    • JSON: http: //www.json.org/
    • MessagePack:http
      : //msgpack.org/ 与 JSON 完全一样,但更紧凑
      无模式
      跨平台
    • Google 协议缓冲区:https
      ://code.google.com/p/protobuf/ 使用模式
      具有 C++、C#、Java、Python 的绑定(至少)
于 2013-06-04T18:40:09.450 回答
0

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

于 2013-06-04T18:39:01.847 回答