我有一个软件架构问题。
我必须设计一个 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 接口(interface)旨在高效地进行大粒度超媒体数据传输”(来自 Fielding 论文的第 5 章)。我的数据是非常精细的数据,因为我的命令只是一个 float ,而且我的传感器状态也是。
我认为 ZeroConf 方式和 RPC 方式没有太大区别。 ZeroConf“只”提供服务发现机制,我不需要这种机制,因为我的应用程序是一个刚性应用程序。双方都知道存在哪些服务。
所以我的问题是:
- 基于 XML RPC 的方法是解决我的 iPhone 和计算机之间的变量同步问题的好选择吗?
- 是否存在其他方法?
Best Answer-推荐答案 strong>
我实际上建议您为您的应用程序使用“tcp socket + protobuf”。
Socket 在将消息推送到您的 ios 应用程序方面非常有效,而 protobuf 可以节省您传递消息而不是字符字节的时间。您的另一个高级提案实际上引入了更多复杂性...
关于ios - IOS/Linux 应用程序中的通信架构选择?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/9606488/
|