0

環境

Rubyでゲームを作っています。energyや などの属性を持つ Character という名前のモデルがありmoneyます。キャラクターは、例えばsleeping. 最後に、Character には、tickその動作メソッドを呼び出すメソッドがありますsleep!。簡略化すると、次のようになります。

class Character
  attr_accessor :energy

  def initialize(behavior)
    @current_behavior = behavior
  end

  def tick
    self.send "#{@current_behavior}!"
  end

  private

    def sleep!
      self.energy -= 1 if energy > 0
    end

end

多くのゲームと同様に、すべての Character の tick メソッドをn分ごとに呼び出す必要があります。これには EventMachine を使用したいと考えています。定期的なタイマーでは、すべての Character インスタンスCharacter.tick_allのメソッドを呼び出す必要があります。tick

質問

これにはどのような永続化エンジンを使用できますか? サーバーの起動時に、すべての Character インスタンスをメモリにロードして、 tickedできるようにします。今のところ、ティックによって状態が変化した後、すべてのインスタンスが永続化されれば問題ありません。

Rails と ActiveRecord で試してみました。ただし、ティックごとに少なくとも 1 つの書き込みおよび読み取りアクションが必要であり、これは少し過剰に思えます。

編集SuperModel を調べました。それはまさに私が望むことをしているようですが、最後のコミットは約1年前です...

4

1 に答える 1

0

簡単なルックアップとメモリ内のデータの保存については、私が知る限り、2 つの選択肢があります。

  • Memcached: これは最もシンプルなキー値ストアの 1 つで、キーに関連付けられた値を簡単に SET および GET できます。ただし、プロセスを強制終了するとすぐに、すべてのメモリがフラッシュ/破棄され、ユーザーからのデータを保存するのに少し問題があります

  • Redis: Redis は、Memcached の単純なキーと値のルックアップ機能をすべて提供し、さらに多くの機能を提供します。Redis はハッシュの操作に優れているという事実とは別に、Redis はセット機能 (= 重複を保存しない) とソートされたセット機能 (アイテムのスコアリングとランク付けなど) を提供します。また、Redis はファイル システム上のデータを追跡します。これは、たまにプロセスを再起動する必要がある場合に最適です。

于 2013-05-07T19:47:15.480 に答える