iOS中通过蓝牙的多点连接框架:如何确定消息是不是“旧”?

Posted

技术标签:

【中文标题】iOS中通过蓝牙的多点连接框架:如何确定消息是不是“旧”?【英文标题】:Multipeer connectivity framework via bluetooth in iOS: how to determine if the message is "old"?iOS中通过蓝牙的多点连接框架:如何确定消息是否“旧”? 【发布时间】:2014-12-22 10:43:11 【问题描述】:

我有一台可以发送消息的设备(服务器),它们应该出现在其他设备上。

问题是所有设备都通过蓝牙连接。这意味着服务器不能将消息直接发送到目的地,但它可以通过许多其他设备发送消息。

但可能会出现以下情况:

1)S(服务器)向 A 发送 message1。

2)S 向 B 发送 message1。

3)S 看不到 A,所以它只向 B 发送 message2(message2 应该覆盖 message1)。

4) 最后 B 看到 A 并发送消息 2。那么 A 应该如何定义 message2 是否比 message1 更旧,反之亦然?

我发现的唯一方法是为每条消息添加来自服务器的时间戳。真的只有一种方式吗?

【问题讨论】:

通常时间戳是处理这个问题的方法 【参考方案1】:

我看到两个常规选项:

    如果服务器是消息的唯一来源,您也可以使用序列号而不是时间戳。

    如果有多个来源,则序列可以绑定到服务器的唯一标识,因此这两个值在它们的组合中仍然是唯一的。

多个来源(A,B)的示例:

A:1, A:2, A:3, A:4, ...
B:1, B:2, B:3, ...

每个来源都可以有单独的(重叠的)序列号。 origin id + 序列的组合使它们再次唯一(复合键)。

优点/缺点:

    时间戳:+易于生成,-在高流量和低粒度时可能重复 序列:+可能比时间戳短,+始终唯一,-需要多个来源的复合键

【讨论】:

第一部分 - 时间戳已经是任何数字,即使它是任何/不正确的。该应用程序只需要每次增加它。我无法理解你的第二部分。能不能换个说法解释一下? 刚刚添加了一些解释。见上文。 还是看不懂。您似乎建议简单地用新消息重写消息,但是如何识别节点是否收到更新的消息然后又收到旧的消息? 我不建议您在出现旧消息时做什么。您的问题是如何检测较旧的消息。您需要某种严格单调递增的序列:自然序列(时间戳)或人工序列(自生成序列号)。更新意味着更高的数字。 好的,“如何检测旧邮件”。第一个节点按以下顺序发送消息:msg1,msg2。第二个节点以另一个顺序接收它们:msg2,msg1。所以我已经知道你答案的第一部分(几乎没有什么新鲜事),第二部分不是我问题的答案。

以上是关于iOS中通过蓝牙的多点连接框架:如何确定消息是不是“旧”?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现在 Flutter 中通过蓝牙打印字符串?

蓝牙连接立即断开多点框架

如何在 ios 中通过蓝牙接收简单的整数值

在多人连接iOS 10中无法通过蓝牙连接

iOS 中的多点连接

在 iOS 中通过蓝牙播放时从内置麦克风录制