保持红宝石物体的方法,通过游戏滴答声改变状态

时间:2013-05-07 11:11:33

标签: ruby persistence eventmachine

上下文

我正在用红宝石制作游戏。它有一个名为Character的模型,其中包含energymoney等属性。角色可以有行为,例如sleeping。最后,角色有一个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

在很多游戏中,每个 n 分钟都需要调用每个角色的tick方法。我想使用EventMachine。在一个定期计时器中,它调用Character.tick_all,它应该调用每个Character实例的tick方法。

问题

我可以使用什么样的持久性引擎?在服务器启动时,我想在内存中加载所有Character实例,以便它们可以勾选。现在,如果每个实例在状态发生变化后因为勾号而保持不变,那么它就可以了。

我已经尝试过使用Rails和ActiveRecord。但它需要为每个滴答至少进行一次写入和读取操作,这似乎有点过分。

修改 我调查了SuperModel。它似乎正是我想要的,但它的最后一次提交大约一年前......

1 个答案:

答案 0 :(得分:0)

对于内存中的简单查找和数据存储,据我所知有两种选择:

  • Memcached:这是最简单的键值存储之一,允许轻松设置与键相关的值和GET值。但是,一旦您终止该进程,所有内存都会被刷新/销毁,并且存储来自用户的数据会有点问题

  • Redis:Redis提供Memcached的所有简单键值查找功能等等。除了事实之外,Redis非常适合使用哈希,Redis提供集合功能(=不存储重复项)和排序集功能(例如用于评分和排名项目)。此外,Redis会跟踪文件系统上的数据,当您需要偶尔重新启动一个进程时,这非常有用。