如何在Wi-Fi中的设备之间同步数据

时间:2014-07-29 15:37:47

标签: java android ios zeromq

我正在开发适用于iOS和Android的应用。基本功能是在没有中央服务器的情况下,在Wi-Fi网络中的所有设备之间保持一定数据集同步。每个设备都可以修改该组数据。

目前的方法是通过Bonjour / Zeroconf发现其他设备,然后发送"更改消息"通过ZeroMQ到所有设备。

由于两个框架都会导致很多问题的实现,我想问这是否是实现这一目标的正确方法。

我将大部分用Bonjour和HTTP-Requests实现的逻辑发送到所有设备。问题只是网络请求,即使经过三次尝试也无法收到,因为网络出现故障。我希望对一般状态或更可靠的消息传递框架进行某种重构。

是否有某种Gossip方法可以传播信息以及发现所有设备更好?

3 个答案:

答案 0 :(得分:6)

简单方案直接与框中的所有要求不匹配。

无法成为按需服务器的临时角色不对称,以便根据“调查(每个人投票)”决定更改(图-s 礼貌nanomsg.org

Survey / Vote Pattern

“总线模式”中的节点联盟角色对称性 Bus / Routing Pattern 符合本身的所有要求。


持续发现“阶段”

是一项作为连续自我识别操作的任务,以便为节目联盟提供相关的信息集,以便在投票期间等待谁以及不为谁投票。相反,当广播< aListITEM >是公平的时候。改变并期望投票得到它的节点联盟“邻居”的支持。

Pieter Hintjens的400多页书 ZeroMQ指南 - 适用于Python开发人员,第8.3章将为您提供有关自主抢先和/或合作发现的初步见解以及有关WiFi的一些评论,请参阅前几章。另请注意关于>>>中ISO-OSI-L2 / L3不确定性的结束语。 Limitations on WiFi SSID L3 ARP based discovery


< aListITEM 的方法>在当前的节点联盟中改变传播

只是要在节点联盟内实现的另一个子协议(层)。

sub-protocol

具有“调查”投票的公交车或某种混合可扩展正式通信模式是否满足所有要求?

也许是的,也许不是。

首先列表所有能够设计“反对”此强制性功能集的要求。

其次,验证,该功能集对于每个节点都是合法且可行的,它将动态地成为/不再是节点联盟的成员。

第三,设计非阻塞,自我恢复社区 - 高阶FSA-FSA - 具有足够的握手,重新同步/ watchdog / timeout(s)和< aListITEM 的传播>更新&投票机制,使这些符合强制性设计特征集。

不要依赖现成的原语(以“弯曲”强制性设计功能集为代价,以满足库可用原语,但相当开发另一个,一种新的高阶形式通信模式信令,由库原语组装而成,符合整个规范。)

答案 1 :(得分:2)

我不知道你问题的具体细节,但是:

  • 如果您没有 A LOT 数据
  • 如果您的更新不是很频繁(> 1 req / s)

broadcast UDP消息有效吗?

如果您查询网络并获取广播地址,这可能是分发/查询信息的简便方法,而无需单独将其发送到每个设备。当然,UDP不可靠,因此您需要实现某种“查询”机制,一旦设备(重新)连接到网络,设备就会要求更新。

我能想到的其他更可靠的选择是使用平台的推送通知。在这种情况下,Apple / Google会确保您的邮件已发送,您唯一的工作就是将设备列表保存在“一个组”中(例如,在同一个wifi上)。但是,这个解决方案还包括拥有一个中央服务器,甚至还包括访问互联网。

答案 2 :(得分:1)

让客户端 - 服务器工作可靠地工作可能非常具有挑战性。特别是跨平台;似乎总有一个需要解决的边缘案例。我建议使用现有的库,而不是重建轮子,其他人已经解决了所有的问题。我还没有将它用于原型以外的任何东西,但AllJoyn open-source project看起来很有希望。另一个选项是Google Nearby APIs,目前只适用于Android和iOS。