【发布时间】:2012-03-25 06:38:17
【问题描述】:
我有一个软件架构问题。 我必须设计一个 IOS 应用程序,它将与 Linux 应用程序通信以获取传感器的状态,并发布执行器命令。这两个应用程序在 IOS 设备和 Linux 计算机之间使用 Ad-Hoc WiFi 连接的本地网络中运行。
所以我必须在两个应用程序之间同步两个值(如图 1 所示)。在 Linux/Linux 系统中,我通过任何发布者/订阅者中间件解决了此类问题。 但是在 IOS / Linux 世界中我该如何解决这个问题?
实际上Linux应用程序内嵌了一个异步TCP Server,而IOS应用程序是一个异步TCP客户端。两个应用程序都通过 TCP 套接字进行通信。我认为这种方法是一种低级方法,我想将通信层迁移到更高级别的基于服务的通信框架。
经过一些书目研究后,我发现了三种解决问题的方法:
- REST 方式:
我可以创建一个 RESTful Web 服务,它可以对传感器状态进行建模,并且能够向执行器发送命令。 IOS 有一个 RESTful Web 服务客户端的实现,即“RESTKit”,我想我可以在服务器端使用 Apache/Axis2。
- RPC 方式:
多亏了 libmaia,我可以在我的 Linux 计算机上创建一个 RPC 服务提供程序。在 IOS 端,我可以使用 xmlrpc (https://github.com/eczarny/xmlrpc)。我的两个程序将通过下图描述的服务进行通信。
- ZeroConf 方式:
我没有详细介绍这种方法,但我想我可以在 IOS 端使用 Bonjour,在 linux 端使用 AVAHI。然后像在双方的 RPC 中一样创建自定义服务。
关于这些方法的讨论:
REST 方式似乎不是好方法,因为:“REST 接口旨在高效地进行大粒度超媒体数据传输”(来自 Fielding 论文的第 5 章)。我的数据是非常精细的数据,因为我的命令只是一个浮点数,我的传感器状态也是。
我认为 ZeroConf 方式和 RPC 方式没有太大区别。 ZeroConf“只”提供服务发现机制,我不需要这种机制,因为我的应用程序是一个刚性应用程序。双方都知道存在哪些服务。
所以我的问题是:
- 基于 XML RPC 的方法是解决我的 iPhone 和计算机之间的变量同步问题的好选择吗?
- 是否存在其他方法?
【问题讨论】:
-
我假设在 SensorValueChanged 调用中,linux 应用程序是客户端,iOS 应用程序是服务器。对吗?
-
我更喜欢服务器运行在linux电脑上。
-
我的意思是,对于 SensorValueChanged,linux 应用程序调用 iOS 应用程序吗?
-
回答您的问题 Paul Lalonde:是的。
标签: ios web-services middleware