2

我正在开发一个 html5 浏览器多人 RPG,node.js 在后端运行,并带有用于客户端数据传输的 Web 套接字插件。我面临的问题是访问和更新用户数据,正如您可以想象的那样,即使连接的用户很少,这个过程也会每秒发生多次。

我进行了一些搜索,发现只有 2 个支持 MySQL 功能的 node.js 插件,但它们都处于早期开发阶段,我发现查询数据库以获取用户所做的每一个小动作效率不高。

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

需要注意的一点是,我会将不同类型的数据分成不同的对象,这样更常访问的数据不会与会减慢查找速度的数据混合在一起。从理论上讲,如果这个项目获得了很多用户,出于显而易见的原因,我会设置一个上限,即一次可以有多少用户登录到单个服务器。

我想知道这是否是个好主意。拥有大对象会大大降低 node.js 服务器的速度吗?如果您碰巧对我的情况的其他可能解决方案有任何想法,我欢迎他们。

谢谢

4

2 回答 2

4

就您的策略而言,为了将数据保存在 php 中的中间对象中,您正在为您的应用程序增加非常高的复杂性。

只是 node.js 和 php 之间的通信似乎很复杂,并且不能保证这会比将事情正确地放在 mysql 中更快。在您和您的数据之间设置任何不必要的障碍将使事情变得更加难以管理。

看来您需要更快速的数据解决方案。你可以考虑使用像 mongodb 这样的异步数据库,或者 redis 可以快速读写(redis 将写入内存,应该非常快)

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

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

缺点是您需要重新学习有关数据持久性的想法,这很难。我自己正在这样做!

于 2010-08-14T23:54:28.897 回答
1

我有一个应用程序几乎按照您的描述进行 - 我选择这样做是因为节点的 MYSQL 驱动程序在开发时不稳定/未记录。

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

所有有限的数据插入/更新都通过 php/mysql。

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

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

我发现我的节点脚本每周可能会停止 -1-2 次 - 可能是由于一些连接问题(未解决) - 但结合 Upstart 和 Monit 它重新启动并发出警报没有问题.....

于 2010-11-03T06:12:21.247 回答