2015-10-20 54 views
1

我正在使用parse構建照片共享應用程序作爲我的後端。現在,我要更新每張照片對象的numberOfLikes屬性用戶點擊喜歡按鈕後,使用:iOS Parse.com更新對象

[photoObject incrementKey:@"numberOfLikes"]; 
[photoObject saveInBackground]; 

我的問題是,讓說,一些用戶喜歡在同一時間相同的照片,將這些類似的請求在一個處理隊列中? (請問Parse會一個一個地處理它們嗎?)假設這張照片有0個喜歡,那麼5個用戶同時喜歡它,考慮到網絡條件相同,保存後的最終結果是1還是5?

對不起,如果這個問題看起來很愚蠢或我的描述很混亂。我對Parse相當陌生。謝謝。

回答

1

Parse中的某些函數是原子的,incrementKey碰巧就是其中之一。保存時

https://parse.com/questions/concurrency-management-in-parse

的incrementKey方法是原子的。所以過程如下:

玩家A在獎品上調用incrementKey方法,並嘗試保存(帶回調函數)。 玩家B在獎品上調用incrementKey方法,並嘗試保存(帶有回調函數)。 無論是玩家A和玩家B的回調運行時,numberOfWins是6 剩下的玩家回調運行時,numberOfWins是7

你也可以實現某種使用這些功能鎖定機制在這個問題中看到。

https://parse.com/questions/locking

大衛的解決方案是聰明的作品(incrementKey是原子)。如果GameRequest對象使用「挑戰者」:0值創建,則每個挑戰者可以調用incrementKey:@「挑戰者」。如果保存後,挑戰者的價值是1,那麼他們是第一個承諾的挑戰者。我特別喜歡這個解決方案,因爲它也適用於N個玩家遊戲。同樣,您可以使用addUnique :(還原子)將用戶ID添加到挑戰者列表中。

最後要回答你的問題,它應該是5,因爲它們是一個接一個地執行,而不是同時執行。

+1

哇謝謝你這個完美的答案!我希望我能給你更多的聲譽!謝謝! –