1

我正在创建一个基于动作的 rpg(不是真正的实时),玩家可以在其中建造自己的城市并在瓷砖地图上移动他的英雄。

背景:

我有这样的收藏:

  • 地图瓦片(每个瓦片都有自己的文档),
  • 英雄(包含统计数据+地图图块参考 - 将其放置在地图上)
  • 城市(每个玩家都有自己的城市,我们存放玩家金币的地方)。

设想:

要移动英雄,我应该:

  • 从集合中获取目标地图图块,以检查它是否被占用
  • 从收藏中获取英雄并检查他是否已经在目的地地图图块
  • 从收藏中获取城市并检查玩家是否有足够的金币移动

然后:

  • 减去运动所需的金币并保存城市文件
  • 使用新地图块更新英雄并保存英雄文档

问题:

我对整个过程的主要关注是,在找到金币之后和减去金币之前的城市可以通过另一个动作来改变(即认领金币动作,它只是通过在城市文件上的原子 $add 在城市中添加金币)。

当然,一些请求阻塞是在前端完成的,但游戏服务器只是 api,所以每个人都可以同时触发 20 个相同的请求,并导致数据不同步。有什么可以做的还是我超级敏感?

附言。在处理一个文档的任何地方,我们都使用 update 或 findOneAndUpdate(使用 $set、$add 等)来省略查找、更改回调中的记录然后保存。

4

0 回答 0