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