我使用這個非常簡單的手段來匹配兩個在場玩家:在Ruby和Redis中匹配現場玩家的最佳策略是什麼?
class Seek
def self.create(uuid)
if opponent = REDIS.spop("seeks")
Game.start(uuid, opponent)
else
REDIS.sadd("seeks", uuid)
end
end
def self.remove(uuid)
REDIS.srem("seeks", uuid)
end
end
然後我的遊戲開始的時候,我根本就Seek.create(uuid)
。
我得到的地方很少有小問題,有時兩個人在同一時間尋找尋找。我猜Redis.spop("seeks")
對於兩名球員都會返回nil
,然後轉換將它們加到REDIS.sadd("seeks", uuid)
。然後他們都無限期地等待(除非有其他玩家出現)。
我的情況看起來像一個相當罕見的情況,但我很好奇,如果我的seek.rb
文件可以用更好的方式寫入,以防止這種情況。
如何使用[Mutex#synchronize](https://ruby-doc.org/core-2.2.0/Mutex.html#method-i-synchronize)? [同步法換併發中旁註](https://stackoverflow.com/questions/14090731/synchronized-method-for-concurrency-in-ruby) –