目标:1)无论连接不良,用户都可以玩我的游戏,和 2)在Parse上存储可靠的用户状态,以获得客户支持和统计信息。< / p>
我的方法:我使用本地客户端存储作为主服务器(因此不需要网络连接),并且我使用Parse作为辅助同步存储,以便我可以解决客户问题和保持统计数据。
==&GT;当网络连接性差时,我经常会为同一级别创建多个PFObject。
e.g. A typical 5 minute game session:
用户解锁关卡:
==&GT;创建PFObject&#34; UserLevel&#34;:uid = currentUser,level =#,status = UNLOCKED,wins = 0等
用户播放此级别并输掉:
==&GT;查询(异步)解析PFObject(匹配userId&amp; level#):
如果找到一个匹配的对象==&gt; ++ loss ...(saveEventually)
如果&gt;找到1个匹配的对象==&gt; object [0]:++ loss ...(saveEventually)(忽略除了一个!)
否则(找不到匹配的对象)==&gt;创建新的PFObject。 (saveEventually)
用户再次播放并获胜:
==&GT;查询(异步)解析PFObject(匹配userId&amp; level#)
如果找到一个匹配的对象:status = COMPLETED,++ wins ...(saveEventually)
如果找到> 1个匹配的对象,则status = COMPLETED,++ wins ...(saveEventually)(忽略除一个以外的所有对象!)
否则(找不到匹配的对象):创建PFObject。 (saveEventually)
......等......
您可以猜测,如果网络连接速度很慢,并且各种查询和saveEventually尚未完成,则很容易导致同一级别的重复PFObject。
我的胆量告诉我在更新期间不创建PFObject(如果它不存在)。相反,Parse状态是草率/落后,并在应用程序启动期间清理它(即干净的同步)。
我认为这是一种非常常见的设计模式,而且我缺少一些基本的CS基础知识。 (我是后端编码的新手。)
答案 0 :(得分:0)
简单的解决方案,因为有固定数量的级别,是预先创建每个&#34; UserLevel&#34;并保存它们,然后在其他任何地方进行更新,而不是创建/更新。