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

标签 java android ios zeromq

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

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

由于这两个框架在实现时会造成很多问题,我想问一下这是否是实现此目的的正确方法。

我已经使用 Bonjour 和发送到所有设备的 HTTP 请求实现了大部分逻辑。问题仅仅是网络请求,由于网络故障,即使尝试了三次也无法收到。我想对一般状态或更可靠的消息传递框架进行某种重构。

传播信息和发现所有设备的某种 Gossip 方法会更好吗?

最佳答案

简单的方案无法立即满足所有要求。

既不是成为按需服务器的临时角色不对称,也不是像“调查(每个人投票)”那样决定改变(图-s 由 nanomsg.org 提供 )

Survey / Vote Pattern

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


持续发现“阶段”

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

Pieter Hintjens 的 400 多页书 The ZeroMQ Guide - for Python Developers, Chapter 8.3 将为您提供关于自主抢先和/或合作发现的一些初步见解以及前面章节中关于 WiFi 的一些评论.另请注意 >>> Limitations on WiFi SSID L3 ARP based discovery 中关于 ISO-OSI-L2/L3 不确定性的结束语。


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

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

sub-protocol

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

也许是,也许不是。

首先列出能够“针对”此类强制性功能集进行设计的所有要求。

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

第三,设计无阻塞、 self 恢复的社区——一个higher-order-FSA-of-FSAs——具有足够的握手、重新同步/看门狗/超时和传播 <aListITEM> 更新和投票机制,以便这些满足强制性设计功能集。

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

关于java - 如何在 Wi-Fi 中的设备之间同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019324/

相关文章:

ios - 布伦特里 iOS 集成

java - 为什么 java.util.Date 给我错误的时间?

android - 如何在我的 android 应用程序中显示 facebook 在线好友?

android - Jenkins:致命:无法初始化类 hudson.util.ProcessTree$UnixReflection

android - 从扩展文件中读取 mp3

ios - 给定一个索引数组,我如何快速过滤一个数组?

iphone - 如何在 iPhone 中包含可变长度图像作为 UITableViewCell 背景?

java - 如何让 maven swagger codegen 插件使用继承生成 Java 类?

java - 可以使用 jcodemodel 修改现有的类文件

java - 在另一台计算机上的另一个 Eclipse 实例中打开 Eclipse 项目