2010-08-14 20 views
2

我正在开发一个带有用于客户端数据传输的Web套接字插件的后端运行node.js的html5浏览器多玩家RPG。我面临的问题是访问和更新用户数据,因为您可以想象即使连接的用户很少,此过程也会每秒发生多次。Node.js Web套接字服务器:我的数据管理思想是否稳定/可扩展?

我已经做了一些搜索,发现只有2个插件用于启用MySQL功能的node.js,但他们都在早期开发中,并且我认为查询数据库以查看用户所做的每个小动作都不是高效。

我的想法是当用户连接并检索与该用户相关的所有信息时,让node.js使用PHP访问数据库。收集的信息将存储在node.js中的JavaScript对象中。这将发生在所有用户玩。然后更新将被应用于对象。当用户注销时,存储在对象中的数据将被更新到数据库并从对象中删除。

需要注意的一点是,我会将不同类型的数据分成不同的对象,以便更常用的数据不会与会降低查找速度的数据混合在一起。从理论上讲,如果这个项目获得了很多用户,我会引入一个限制,即有多少用户可以一次登录到一台服务器上,原因很明显。

我想知道这是不是一个好主意。大型对象是否会显着减慢node.js服务器的速度?如果您碰巧对我的情况有其他解决方案有任何想法,欢迎他们。

感谢

+0

这个MySQL模块至少可以工作:http://github.com/stevebest/node-mysql – 2010-08-14 21:13:59

回答

4

至于你的战略去,为保持数据的中间对象在PHP中,要添加到您的应用程序非常高的水平的复杂性。

只是node.js和php之间的通信看起来很复杂,并不能保证这会比在mysql中正确放置更快。在你和你的数据之间加入任何不切实际的障碍会让事情变得更加难以管理。

看起来您需要更快速的数据解决方案。您可以考虑使用异步数据库,如mongodb或redis,它们将快速读写(redis会写入内存,速度应该快得多)

这些都是通常与node.js一起使用,只是因为它们可以处理实时数据加载。

实际上,redis是您真正要求的,它实际上将内容存储在内存中,然后定期将其保存到磁盘中。你不能比这更快,但你需要足够的内存。如果ram看起来像一个问题,那么使用仍然非常快的mongodb。

缺点是你需要重新学习关于数据持久性的想法,这很难。我正在自己做这个过程!

+0

看起来我并没有对自己最初的想法表达清楚。我打算将数据存储在服务器上的JavaScript对象中,并且只在用户连接时仅使用PHP查询服务器。 不少,这听起来像Redis是我正在寻找。谢谢您的意见。 :) – Ryan 2010-08-15 02:46:01

1

我有一个应用程序正在执行您所描述的所有操作 - 我选择这样做,因为节点的MYSQL驱动程序在开发时不稳定/未记录。

我有200个连接的用户 - 请求数据每秒3-5次,并通过php页(每个200-800毫秒)从Apache返回JSON,约1000行,并将内容放入数组中获取整个表。我循环访问数组,并根据请求查找相关数据 - 它可以工作,并且速度很快 - 不会对CPU和内存造成重大负担。

所有数据插入/更新,这是有限的通过PHP/MySQL的。

优点: 1.它的一个简单的解决方案,已知的稳定的服务。 2.只有1个客户端连接到apache/php/mysql每个200-800毫秒 3.所有节点客户端获得非阻塞的好处。 4.运行在2个小型“pc风格”服务器上 - 并处理大约8000次/秒。 (阿帕奇板凳)

缺点: 1.很多 - 但它完成了工作。

我发现我的节点脚本可以阻止〜12倍week-可能是由于一些连接问题(未解决) - 但暴发户结合和MONIT它重新启动和警报,没有任何问题.....

相关问题