私は2人のライブのプレイヤーと一致するように、このかなり簡単な手段を使用しています:私のゲームの開始時に 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-synchronize)の使用はどうですか? [同期メソッドのための同時実行のルビ](https://stackoverflow.com/questions/14090731/synchronized-method-for-concurrency-in-ruby) –