php - Jquery 网络聊天中的查询

标签 php jquery mysql

我正在考虑使用 PHP、JQuery 和 MySQL 的网络聊天,但我在如何将查询发送到数据库方面遇到了一些麻烦。

  • 结构:

MySQL 从聊天中接收所有数据,并将其保存在包含来自/至列的“对话”表中。

Jquery 执行查询并验证当前用户是否有任何新消息。

  • 问题:

如何以不使数据库服务器重载的方式使用 Jquery 进行查询(考虑到有很多用户)?我想在 Jquery 中使用计时器查询数据库,所以在几秒钟内。将完成一个新的查询,并将同时对所有用户重复。

最佳答案

最好的方法(根据我的说法)是在 jquery 中有一个 1 秒的间隔。每秒调用一次 php 文件(例如 fetch_new.php)。

在您的数据库中,您有两个表:

  1. 用户
  2. 消息

当用户客户端调用 fetch_new.php(通过 JavaScript)时,您更新 users 表并将一列 (last_sync) 设置为当前时间 (最好是微时间,这样用户将永远不会收到发送给他们的两条相同的消息)。新消息会附加到对话中。

当您执行查询时,它应该看起来像这样:

SELECT * FROM `messages` WHERE `to` = $user_id AND `timestamp` > $last_sync

每秒向 MySQL 发送许多问题是完全没问题的,只要它可以处理许多连接(足够的 RAM 和 CPU)。密切关注 PHPMyAdmin 中的“状态”选项卡,了解使用了多少 CPU 和 RAM。

在我构建的聊天应用程序中,我添加了一些“智能”功能。如果用户在过去(比如说)20 秒内没有收到任何消息,我会增加间隔以每 2 秒而不是每秒向 fetch_new.php 发出请求。如果超过一分钟,我将其增加到 3 秒,依此类推。这样您就不会因为拥有大量空闲用户而减慢您的应用程序。

关于php - Jquery 网络聊天中的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714421/

相关文章:

php - 无法返回 MySQL 查询的结果

php - 如何在服务器上安全地存储文件

php - 如何从管理表单中检索多个复选框的值

php - 独立使用 Symfony Routing 时如何缓存路由?

javascript - 在jquery中查找TR内td的所有输入

javascript - 当页面加载图像时,它只加载一次,还是每次在标记中找到它时?

javascript - 为什么我的 C# 函数不从 ajax Javascript 代码执行?

php - 查询数据库后使用 php 进行转置

MYSQL错误: #3699 - Timeout exceeded in regular expression match

php - 发送 : How to insert NULL values into MySQL