菜鸟教程小白 发表于 2022-12-12 19:36:23

ios - IOS/Linux 应用程序中的通信架构选择?


                                            <p><p>我有一个软件架构问题。
我必须设计一个 IOS 应用程序,它将与 Linux 应用程序通信以获取传感器的状态,并发布执行器命令。这两个应用程序在 IOS 设备和 Linux 计算机之间使用 Ad-Hoc WiFi 连接的本地网络中运行。 </p><p>
所以我必须在两个应用程序之间同步两个值(如图 1 所示)。在 Linux/Linux 系统中,我通过任何发布者/订阅者中间件解决了此类问题。 <strong>但是在 IOS/Linux 世界中我该如何解决这个问题</strong>?</p>
<p> <img src="/image/dAiL6.png" alt="Figure 1 : my synchronization problem"/> </p>
<p>其实Linux应用程序内嵌了一个异步TCP Server,而IOS应用程序是一个异步TCP客户端。两个应用程序都通过 TCP 套接字进行通信。我认为这种方法是一种低级方法,我想将通信层迁移到更高级别的基于服务的通信框架。</p>
<p>经过一些书目研究后,我发现了三种解决问题的方法:</p>
<ol>
<li>REST 方式:<p>
我可以创建一个 RESTful Web 服务,它对传感器状态进行建模,并且能够向执行器发送命令。 IOS 有一个 RESTful Web 服务客户端的实现,即“RESTKit”,我想我可以在服务器端使用 Apache/Axis2。</p></li>
<li>RPC 方式:<p>
多亏了 libmaia,我可以在我的 Linux 计算机上创建一个 RPC 服务提供程序。在 IOS 端,我可以使用 xmlrpc ( <a href="https://github.com/eczarny/xmlrpc" rel="noreferrer noopener nofollow">https://github.com/eczarny/xmlrpc</a> )。我的两个程序将通过下图描述的服务进行通信。</p></li>
<li>ZeroConf 方式:<p>
我没有详细介绍这种方法,但我想我可以在 IOS 端使用 Bonjour,在 linux 端使用 AVAHI。然后像在双方的 RPC 中一样创建自定义服务。</p></li>
</ol>
<p>
</p><p> <img src="/image/oquKc.png" alt="The RPC Solution"/> </p>
<p>
</p><p><strong>关于这些方法的讨论:</strong></p>
<p>REST 方式似乎不是好方法,因为:“<em>REST 接口(interface)旨在高效地进行大粒度超媒体数据传输</em>”(来自 Fielding 论文的第 5 章)。我的数据是非常精细的数据,因为我的命令只是一个 float ,而且我的传感器状态也是。</p>
<p>我认为 ZeroConf 方式和 RPC 方式没有太大区别。 ZeroConf“只”提供服务发现机制,我不需要这种机制,因为我的应用程序是一个刚性应用程序。双方都知道存在哪些服务。</p>
<p>所以我的问题是:</p>
<ul>
<li><strong>基于 XML RPC 的方法是解决我的 iPhone 和计算机之间的变量同步问题的好选择吗?</strong></li>
<li><strong>是否存在其他方法?</strong></li>
</ul></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我实际上建议您为您的应用程序使用“tcp socket + protobuf”。 </p>

<p>Socket 在将消息推送到您的 ios 应用程序方面非常有效,而 protobuf 可以节省您传递消息而不是字符字节的时间。您的另一个高级提案实际上引入了更多复杂性...</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - IOS/Linux 应用程序中的通信架构选择?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9606488/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9606488/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - IOS/Linux 应用程序中的通信架构选择?