我计划使用html5和node.js尝试实时游戏开发。 我之前使用轮询来模拟游戏中的实时更新。 我的实时游戏将使用AJAX来保持游戏在多个客户端之间同步。基本上每当游戏状态发生变化时,我都会更新相关数据库行中的last_updated字段。每当客户端轮询服务器时,它将检查自上次轮询返回任何相关更新以来发生的任何更新(通过将先前的轮询时间与last_updated字段进行比较来执行此操作)。
在我的游戏新版本中,我改为使用node.js(和web-socket)我想避免像这样的机制,我必须不断搜索数据库以查找是否有更新。我想知道是否有其他方法可以存储重要的游戏状态信息,而不需要在这个mannor中使用数据库。
我真的希望能够在更改游戏状态时设置要触发所有客户端的事件,而不必不断检查更改,因为这样可以节省大量的处理/查询。我真的不知道在一个客户端上触发的事件是否可以发送到也连接到运行服务器的node.js的其他客户端。我总是使用数据库来做这类事情,但我真的希望还有其他更好的选择吗?
干杯,乔希
答案 0 :(得分:4)
首先,您需要Socket.IO之类的东西来处理websockets(如果WS不可用,则需要长轮询等)。
之后你需要Redis或ZeroMQ来扩展Socket.IO(通过扩展我的意思是多个进程甚至多个服务器)。您也可以使用CouchDB的_changes event。 (可以在发生插入/更新时通知您)
至于存储引擎,我建议您使用MongoDB(非常适合写入,这是您需要的)或Redis(从内存中读取)和CouchDB(用于写入)的组合。
所有这些库都有Node.js库,你可以在模块页面https://github.com/joyent/node/wiki/modules上查看,或者你可以在他们的网站上找到它们(在dbs网站上)。
答案 1 :(得分:3)
您需要一个可以推送数据的数据库。
Redis和沙发就是这样的例子。
而不是在数据库中搜索更改(地狱之慢),让数据库告诉你“嘿,发生了变化”
然后,您只需通过socket.io将该更改广播到所有连接的客户端。
答案 2 :(得分:1)
他想要存储... MongoDB将是一个不错的选择。如果没有交易要求。