场景:基于网络的文字游戏
- 玩家 A 向玩家 B 发送发送 10,000 积分的请求(此请求需要 20 毫秒才能完成)。
- 在发送第一个请求(仍在处理中)后 3 毫秒,玩家 A 向战斗玩家 C 发送另一个请求,此请求需要 100 毫秒才能完成。
发生了什么,在第 1 步中,应用程序从玩家 A 中删除积分,将其提供给玩家 B,但在将其保留在数据库中之前,第二个请求到来,加载状态仍显示玩家 A 帐户中的 10k 并覆盖请求中的正确状态1(0学分),10k +第2步的战利品。结果:玩家A和B现在都有10k在他们的账户中,钱只是翻了一番。
可以做些什么来防止这种情况发生?这是显示问题的假设场景,对于上述场景account=account+loot
sql 会做,但我正在寻找适用于所有数据类型的解决方案。