Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parse platform 正在同步连接不良的本地状态和远程状态(解析)_Parse Platform_Sync_Race Condition - Fatal编程技术网

Parse platform 正在同步连接不良的本地状态和远程状态(解析)

Parse platform 正在同步连接不良的本地状态和远程状态(解析),parse-platform,sync,race-condition,Parse Platform,Sync,Race Condition,目标:1)允许用户在连接不良的情况下玩我的游戏,和2)在解析中存储~可靠的用户状态,以获得客户支持和统计信息 我的方法:我使用本地客户端存储作为主存储(这样就不需要网络连接),我使用Parse作为辅助同步存储,这样我就可以解决客户问题并维护统计数据 游戏有一系列固定的关卡 每个级别的用户状态都作为SOT本地存储在UserDefaults中(是的,有点难看) 我使用Parse作为客户支持问题和统计数据的二级复制存储 因此,我还将级别状态存储在Parse上(即PFObject=“UserLevel

目标:1)允许用户在连接不良的情况下玩我的游戏,2)在解析中存储~可靠的用户状态,以获得客户支持和统计信息

我的方法:我使用本地客户端存储作为主存储(这样就不需要网络连接),我使用Parse作为辅助同步存储,这样我就可以解决客户问题并维护统计数据

  • 游戏有一系列固定的关卡
  • 每个级别的用户状态都作为SOT本地存储在UserDefaults中(是的,有点难看)
  • 我使用Parse作为客户支持问题和统计数据的二级复制存储
  • 因此,我还将级别状态存储在Parse上(即PFObject=“UserLevel”:userId、level、status、high score、wins、loss等)
  • 每个用户每个级别应该只有一个(或零个)PFObject
==>当网络连接不良时,我经常为同一级别创建多个PFObject。

e.g. A typical 5 minute game session:
  • 用户解锁一个关卡:
    ==>创建PFObject“UserLevel”:uid=currentUser,level=#,status=UNLOCKED,wins=0,等等

  • 用户播放此关卡并失败:
    ==>PFObject的查询(异步)解析(匹配userId和level):
    如果找到一个匹配对象==>++丢失。。。(最终保存)
    如果找到大于1个匹配对象==>对象[0]:++丢失。。。(最终保存)(忽略除一个之外的所有内容!)
    Else(未找到匹配对象)==>创建新对象。(最后)

  • 用户再次播放并获胜:
    ==>PFObject的查询(异步)解析(匹配用户ID和级别)
    如果找到一个匹配的对象:status=COMPLETED,++wins。。。(最终保存)
    如果找到大于1个匹配对象,状态=已完成,++将赢得。。。(最终保存)(忽略除一个之外的所有内容!)
    Else(找不到匹配的对象):创建PFObject。(最后)

  • 。。。等等

  • 正如您所猜测的,如果网络连接速度较慢,并且各种查询和保存操作尚未完成,则很容易导致同一级别的PFObjects重复

    我的直觉告诉我,如果PFObject不存在,请不要在更新过程中创建它。相反,解析状态应该是sloppy/behind,并在应用程序启动时进行清理(即干净的同步)


    我假设这是一种非常常见的设计模式,我缺少一些基本的CS基础知识。(我是后端编码的新手。)

    简单的解决方案,因为有固定数量的级别,是预先创建每个“用户级别”并保存它们,然后在其他任何地方进行更新,而不是创建/更新。

    我喜欢简单。:-)谢谢