【发布时间】:2021-07-10 15:46:03
【问题描述】:
在question answer 中,@Frank van Puffelen 解释了实时数据库如何增加原子操作 ServerValue.increment(1) 工作:
Client Server Client
+ + +
increment(1) | | |
| | | increment(1)
| (increment, 1) | |
+--------->---------+ (increment, 1) |
| |---------<---------+
+---------<---------+ |
| (ack, 2) |--------->---------+
| | (ack, 3) |
| | |
v v v
如果在发送“(increment, 1)”之后,客户端不知何故失去了连接并且没有收到“(ack, 2)”?
在我的测试中,它只是重试,有时会导致重复递增。它有时会发生在连接不良的情况下。 :(
这是预期的行为吗?
要重现测试,只需在反复打开和关闭互联网连接(WiFi 或 4G)时执行以下示例,以模拟连接不佳的情况:
val updates: MutableMap<String, Any> = HashMap()
updates["posts/$key/starCount"] = ServerValue.increment(1)
updates["user-posts/$uid/$key/starCount"] = ServerValue.increment(1)
database.updateChildren(updates)
【问题讨论】:
-
有趣的相关话题:The Two Generals' Problem
标签: android firebase firebase-realtime-database