php - 使用 PHP 和 jQuery 进行实时聊天。在哪里存储信息? mysql还是文件?

标签 php jquery mysql chat

有 1 对 1 实时聊天。两种解决方案:

1) 我将每条消息都存储到数据库中,并且在 jQuery 的帮助下,我每秒检查数据库中是否有新消息。当然我也使用缓存。如果有,我们会给出该消息。

2) 我将每条消息存储在一个 html 文件中,并且每秒通过 jQuery 一遍又一遍地显示该文件。

什么更好?还是有第三种选择?总的来说,对于这种项目,mysql 或 file 哪个更好?

非常感谢。

附注最重要的问题是:什么方式更高效,什么方式吃的资源更少!

编辑:现在,对于许多聊天(比如说 2,500 个聊天,这意味着 5,000 个用户)使用长轮询并检查何时通过 javascript 每秒编辑文件是不是很糟糕?我使用非常相似的方法,比如这个聊天:http://css-tricks.com/jquery-php-chat/它会杀死我的主机吗?

最佳答案

每个人都给出了广泛的意见,但我认为没有人真正一针见血。

当涉及到存储数据时,数据量、访问速率以及其他几个因素都决定了最佳存储平台。

有些人建议使用 memcached。现在,尽管这是一个有效的答案(您可以使用它),但我认为这不是一个好主意,仅基于 memcached 将数据存储在您的服务器内存中这一事实。

您的内存不是用于存储数据,而是用于实际应用程序、操作系统、共享库等。

在内存中存储数据可能会导致当前运行的其他应用程序出现很多问题。如果您在 RAM 中存储太多数据,您的应用程序将无法完成分配给它们的操作。

虽然这比 MySQL 等基于磁盘的存储平台要快,但它并不可靠。

我个人会使用 MySQL 作为您的服务器端存储引擎。这将减少您遇到的问题数量,并使数据非常易于管理。

为了加快对客户的响应速度,我会考虑运行 node在您的服务器上。

这是因为它是事件驱动且非阻塞的。

这是什么意思?

好吧,当客户端 A 请求一些存储在硬盘驱动器上的数据时,传统上 PHP 可能会对 C++ 说,为我获取存储在硬盘驱动器这个扇区上的这 block 数据。 C++ 会说“好的,没问题”,当它继续获取信息时,PHP 会坐下来等待数据被读取并返回,然后再继续它的操作,阻塞所有其他客户端在同时。

使用节点,它略有不同。 Node 会对内核说,“获取我这 block 信息,完成后,给我打电话”,然后它会继续接受来自其他可能不需要磁盘访问的客户端的请求。

这么突然,因为我们给内核分配了一个回调,我们不必等待:),快乐的日子。

看看这张图片: Node Event Loop

这确实可能是您正在寻找的答案,请参阅以下内容以获取有关节点如何成为您正确选择的更多描述性和详细信息:

关于php - 使用 PHP 和 jQuery 进行实时聊天。在哪里存储信息? mysql还是文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655774/

相关文章:

php - fgetcsv() 不适用于 $_POST 中的变量 $delimiter

php - 切换到 Live Credentials 时,PayPal Rest API 会出现 401 错误

javascript - 使用 jQuery 调整 HTML 表格列的大小

mysql - 在不重启服务器的情况下更改mysql变量

php - 尝试通过制作可重用功能来减少代码点火器中的代码

php - 在远程服务器上调试PHP代码的解决方案,使用远程IDE

php - Wordpress:413 请求实体太大

php - 希腊字母和 JSON 响应

jQuery fadeOut/fadeIn 未按预期工作?

javascript - HTML 选择下拉国家和州使用 (countries.js)