php - 有关数据库性能等的问题

标签 php mysql database performance

对于学校,我必须创建一个基于 AJAX/PHP 的聊天框,有人只需输入用户名并按单击即可加入。 我一切正常,但我有一些疑问,我这样做是否是正确的方法。

举个例子,我使用 JavaScript 中的 setInterval 每秒从数据库中获取最新的 5 条记录。但是如果有人在网站本身上更改了这个间隔怎么办?并使其每秒查询数据库?我正在考虑存储最后执行的查询日期并检查它是否确实是我设置的 1 秒。但我要把它存放在哪里呢?我很可能不想将其存储在我的数据库中,因为我还必须查询数据库。

还有一个问题是,专业的聊天框真的会使用间隔来检查数据库中x时间内的新记录吗?如果没有,他们如何处理?

ATM 我现在不知道该怎么做,是否有经验丰富的 PHP 开发人员可以回答这些问题?

最佳答案

每 5 秒请求一次服务器(无论是否有数据库查询)成本高昂且无法扩展。让服务器在有新消息时通知客户端,而不是让客户端每隔固定时间间隔请求一次。为此,您需要更持久的连接。有两种流行的方法:

  • Ajax 长轮询:通常,Web 服务器在成功提供内容后将关闭其连接。长轮询背后的想法是保持连接长时间打开并通过卡住来提供内容。一旦有新消息,它就会反馈给客户端。一旦连接超时,它会重新打开一个新的连接。

  • WebSocket:WebSocket允许Web浏览器和服务器通过其WebSocket协议(protocol)(类似于HTTP协议(protocol))进行持久连接。部分浏览器尚不支持此功能。

关于php - 有关数据库性能等的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27274435/

相关文章:

php - 使用勾股定理在一定距离内找到点

php - 在 PHP 中,当向数据库提交字符串时,我应该使用 htmlspecialchars() 还是使用正则表达式来处理非法字符?

php - 寻找简单 HTML 游戏的设计/架构建议

java - 无法连接到 mySQL 数据库

mysql - Openshift:如何导入MySQL驱动到tomcat/lib目录

java - 如何使我的java代码能够与许多数据库和许多操作系统一起工作?

php - 使用 empty() 函数检查对象是否为 null 是否正确?

php - 从 $GET 将 ip 插入 mysql php

PHP-从同一行的主键获取第二列值

mysql - 如何对按列分组的表中的行进行计数和求和?