我正在考虑使用 PHP、JQuery 和 MySQL 的网络聊天,但我在如何将查询发送到数据库方面遇到了一些麻烦。
- 结构:
MySQL 从聊天中接收所有数据,并将其保存在包含来自/至列的“对话”表中。
Jquery 执行查询并验证当前用户是否有任何新消息。
- 问题:
如何以不使数据库服务器重载的方式使用 Jquery 进行查询(考虑到有很多用户)?我想在 Jquery 中使用计时器查询数据库,所以在几秒钟内。将完成一个新的查询,并将同时对所有用户重复。
最佳答案
最好的方法(根据我的说法)是在 jquery 中有一个 1 秒的间隔。每秒调用一次 php 文件(例如 fetch_new.php)。
在您的数据库中,您有两个表:
- 用户
- 消息
当用户客户端调用 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/