2011-11-24 24 views
0

我正在计划使用html5和node.js实验游戏开发。 我以前使用轮询模拟了游戏中的实时更新。 我的实时游戏会使用AJAX来保持游戏在多个客户端之间的同步。基本上,每当游戏状态发生变化时,我都会更新相关数据库行的last_updated字段。每当客户端对服务器进行轮询时,它都会检查自上次轮询返回任何相关更新(通过将先前轮询时间与last_updated字段进行比较)进行的更新。在Node.js中有什么存储技术可用于实时游戏

在我使用node.js(和web-sockets)的新版游戏中,我想避免像这样的机制,我必须不断地对数据库执行搜索以查找是否有更新。我想知道是否有其他方法来存储重要的游戏状态信息,而不使用这个mannor中的数据库。

我真的很希望能够在游戏状态发生变化时能够在所有客户端上设置事件,而不必持续检查更改,因为这样可以节省大量的处理/查询。我不知道在一个客户端上触发的事件是否可以发送给也连接到我的node.js服务器的其他客户端。我一直使用这样的数据库,但我真的希望有更好的选择?

干杯,乔希

+0

这不是100%相关的问题,但你看过NowJS吗?我的几个朋友用它来制作游戏和实时应用程序,包括黑客马拉松节点,所以你可能会觉得它很有用。 –

回答

4

首先,你需要像Socket.IO这样的东西来处理websockets(如果WS不可用,还需要长轮询等)。

之后,您需要RedisZeroMQ来扩展Socket.IO(通过扩展我的意思是多个进程甚至多个服务器)。你也可以使用CouchDB_changes event。 (它可以让你知道什么时候插入/更新)

至于存储引擎,我建议你使用MongoDB(非常适合写入,这就是你需要的)或者Redis的组合(从内存中读取)和CouchDB(用于写入)。

所有这些库都有Node.js库,您可以在模块页https://github.com/joyent/node/wiki/modules上签出,也可以在他们的网站(在dbs网站上)找到它们。

1

他想存储... MongoDB将是一个不错的选择。如果没有交易要求。

3

你想要一个可以推送数据的数据库。

Redis和沙发就是这样的例子。

而是然后搜索数据库更改(缓慢的地狱)你让数据库告诉你“嘿改变发生”

然后你只需播过socket.io这种变化给所有连接的客户端。

+0

So Redis/Couch有可用的node.js驱动程序吗?并有任何我可以如何使用这种“数据库推送”/“广播”方法来分散客户端更新的例子吗? –

+1

@jezternz在npm上快速搜索找到你的驱动程序,我用过node-redis&nano。至于例子,我没有任何去问#node.js或#couchdb – Raynos

相关问题