【问题标题】:How to sync an application state over multiple iphones in the same network?如何在同一网络中的多个 iphone 上同步应用程序状态?
【发布时间】:2011-05-02 22:07:26
【问题描述】:

我正在开发一个 iPhone 应用程序,它基本上允许点击一系列动作。这些系列是预定义的,并与通用配置服务器同步。

该应用可能同时在多个设备上运行。假定所有设备都定义了相同的一系列操作。所有设备都被认为是平等的,没有服务器和多个客户端或类似的东西。

(仅)一个人在任何给定时间使用其中一个设备,但是该人有可能在任何给定时间切换到不同的设备。所有“被动”设备都需要与主动设备同步,以便它们显示相同的操作。

整个事情应该尽可能地自动发生。没有选择设备、配置,同一个网络中的所有设备都参与同一系列动作。

一个额外的要求是设备可以在演示过程中加入(一系列动作)并且需要跳转到当前活动的动作。

现在,我看到了两个选项来实现其中的网络/通信部分:

  • 你好。我已经实现了一个工作原型,它可以自动与网络中的一 (1) 个其他设备连接并与之通信。在这一点上,我不确定“多设备”要求有多少额外的工作。我是否必须为每个设备打开一组连接并手动将同步事件发送给所有设备?有没有更好的方法或者 bonjour 提供什么来帮助我解决这个问题?鉴于我想与网络中的每台设备进行通信,Bonjour 提供了什么?

  • 使用 AsyncUdpSocket 进行多播。只需定义一个端口并将多播同步事件发送到该端口即可。我想与使用 tcp 的 bonjour 相比,主要问题是连接不安全并且数据包可能会丢失。但是,如果这确实是一个问题,那么这是在一个低流量的私有、受保护的 wlan 网络中。还有其他我没有看到的缺点吗?因为在这一点上这听起来是一个相对简单的选择......

你会推荐哪一个?还是有其他更好的选择,我没有想到?

【问题讨论】:

    标签: iphone networking sync bonjour multiple-instances


    【解决方案1】:

    您应该查看 GameKit(内置于 iOS)——它们在一个方便的包中提供了很多您需要的机器。您可以轻松发现网络上的对等点,并轻松在客户端之间来回发送数据(广播或点对点)

    【讨论】:

    • 谢谢。我一直在阅读developer.apple.com/library/ios/#documentation/…,但我不确定什么是让它尽可能免配置/设置的最佳方法。具体来说,我想避免有人需要启动服务器以便其他人可以连接到它。所以一个想法是先找一个服务器几秒钟,如果没有,就开始一个新的。听起来不错?
    • 我认为您不需要等待几秒钟。我认为您应该创建一个协商协议,让设备自行决定谁将成为服务器。 (例如,第一个到达的设备可能是服务器)
    • 真正的问题将是当设备走出房间或断开网络时,如果您的方案可能的话。离开网络的设备无法宣布“嘿,我要离开了”——因此其他设备将不得不注意到然后选择新的服务器设备。但是,如果您的协议不依赖于这种情况下的响应能力,那您就可以了。
    • 谢谢,我会看看这会把我引向何方并报告。当然听起来很有趣。关于失去连接的好点,但是我认为我不需要涵盖这种情况。
    • 祝你好运。顺便说一句:我以前在火线上工作,他们有一个系统,总线上的一个节点被选为“总线主控”。听起来很相似。但是,在火线案例中,您始终知道设备何时出现/消失,因为它涉及插入某些东西......
    【解决方案2】:

    根据我的经验,Bonjour 非常适合您的需求。有一个带有相关源代码的优秀教程:Chatty,可以轻松修改以适合您的目的。

    【讨论】:

      【解决方案3】:

      我为 iphone(没有集中式服务器)搭建了一个分布式消息总线,它非常适合这个。应该注意的是,UI 的人把代码弄得一团糟,所以那里是龙:https://code.google.com/p/iphonebusmiddleware/

      基本思想是使用 bonjour 形成一个有领导选举的网络。领导者成为所有奴隶订阅感兴趣主题的枢纽。然后发送到给定主题的任何消息都会传递到订阅该主题的每个节点。主节点断开简单意味着重新启动领导者选举过程。

      【讨论】:

        猜你喜欢
        • 2014-06-14
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        相关资源
        最近更新 更多