我正在用红宝石制作游戏。它有一个名为Character的模型,其中包含energy
和money
等属性。角色可以有行为,例如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。它似乎正是我想要的,但它的最后一次提交大约一年前......
答案 0 :(得分:0)
对于内存中的简单查找和数据存储,据我所知有两种选择:
Memcached:这是最简单的键值存储之一,允许轻松设置与键相关的值和GET值。但是,一旦您终止该进程,所有内存都会被刷新/销毁,并且存储来自用户的数据会有点问题
Redis:Redis提供Memcached的所有简单键值查找功能等等。除了事实之外,Redis非常适合使用哈希,Redis提供集合功能(=不存储重复项)和排序集功能(例如用于评分和排名项目)。此外,Redis会跟踪文件系统上的数据,当您需要偶尔重新启动一个进程时,这非常有用。