2016-05-09 156 views
0

我使用解析創建了一個基於回合的繪圖遊戲,您可以與任何人玩。一次只有一個用戶可以玩。有三個轉彎。在玩家的朋友列表中,這一切都可以正常工作 - >您可以開始一個新遊戲,也可以收到一條通知讓您繼續。PARSE - 處理併發請求?

我想實現一個多人模式 - >爲此,我有一個數據庫中的所有可用公共遊戲的單獨列表。如果一個遊戲被公開,我會在該列表中創建一個新的對象並帶有指向遊戲的指針。每次用戶搜索可用遊戲時,他都會查詢該列表,如果找到記錄,我會刪除該特定列表中的公共遊戲對象以使其不能用於其他用戶,並且遊戲繼續。

我想知道以下 - >如何解析處理併發請求? 是否有可能同時搜索多個用戶嘗試刪除同一對象(請參閱下面的代碼)?我已經在我的查詢跳過隨機指標避免這種行爲,但它似乎微不足道..

這裏是我的雲代碼用於處理請求的樣本:

Parse.Cloud.define('findPublicGame', function(req, res) { 
    var query = new Parse.Query("public"); 
    query.count({ 
     success: function(number) { 
      if (number == 0) { 
       // no public games - reject 
       res.success(number); 
      } else { 
       // public game found - handle 
       query.limit(1) 
       var randomIndex = parseInt(Math.random() * number); 
       query.skip(randomIndex); 
       query.find({ 
        success: function(object) { 
         // delete public 
         object[0].destroy({ 
          success: function(_data) { 
           res.success(_data); 
          }, 
          error: function(error) { 
           res.error(); 
          } 
         }); 
        }, 
        error: function(error, object) { 
         res.error(error); 
        } 
       }); 
      } 
     }, 
     error: function(error) { 
      res.error(error); 
     } 
    }); 
}); 

它是正確的假設試圖銷燬已經銷燬的對象會導致錯誤?

我有公共遊戲對象上添加beforeDelete功能,以檢查它是否仍然可用的想法,但我想保持我現在的要求低的數..

如果任何人都可以啓發我,讚美!

回答

0

假設試圖銷燬一個已經銷燬的對象會導致錯誤是否正確?

根據我的經驗,不,這是不正確的。我總是直接在Android和iOS API中使用可用的刪除方法,而不是調用解析雲中的方法,但對於Android和iOS API中的刪除方法,在已刪除的對象上調用delete不會引發錯誤。它就好像刪除成功一樣。

我有公共遊戲對象上添加beforeDelete功能,以檢查它是否仍然可用的想法,但我想保持我現在的要求低的數..

這是您擁有的最佳選擇。通常情況下,你正在處理「對象修改」,所以你會檢查像「修改時間」的時間戳,但由於你正在刪除對象,你只需要檢查它是否仍然存在。

+0

我認爲這是一個明智的舉動,把銷燬功能放在客戶端,客戶端/服務器之間的延遲可能可以幫助一些避免檢索相同的對象..我仍然使用我的雲代碼函數來檢索公共對象,只是在beforeDelete上實現了「檢查是否存在」,它工作正常,我只希望它可以擴展。謝謝你的幫助! 在另一個說明中,parse-server只是實現了liveQueries,我可以用它來檢查用戶是否訂閱了查詢後是否刪除了一個對象。 –