Php 将新元组添加到数据库时自动刷新内容

Php 将新元组添加到数据库时自动刷新内容,php,mysql,ajax,Php,Mysql,Ajax,我正处于开发某些东西的概念化阶段,但不太确定某个特性 我在表单中有一个DIV,我们称它为id='divComments'。此div包含关于特定标题的所有注释。它从数据库中检索所有数据,这很容易做到 现在,当页面刷新时,该div将填充所有注释。如果其他用户添加了注释,则所有其他用户在登录(在该时间点之后)或刷新页面时都会看到此注释 如果我想从数据库中输入这个div,并在数据库的关系/表中插入内容时自动刷新,该怎么办?因此,我打开了我的页面(我没有刷新它,只是盯着它看),显示让我们假设x,其他人在特

我正处于开发某些东西的概念化阶段,但不太确定某个特性

我在表单中有一个DIV,我们称它为id='divComments'。此div包含关于特定标题的所有注释。它从数据库中检索所有数据,这很容易做到

现在,当页面刷新时,该div将填充所有注释。如果其他用户添加了注释,则所有其他用户在登录(在该时间点之后)或刷新页面时都会看到此注释

如果我想从数据库中输入这个div,并在数据库的关系/表中插入内容时自动刷新,该怎么办?因此,我打开了我的页面(我没有刷新它,只是盯着它看),显示让我们假设x,其他人在特定的数据库表中添加一个元组,让我们称之为y,我的div现在显示x和y。换句话说,它可以从数据库中实时更新,而无需刷新


有人知道怎么做这样的事情吗?

HTTP是无状态的。一旦资产通过HTTP连接完成下载,连接就会被破坏,服务器不再知道客户端接下来要做什么

有一些方法可以通过使用cookie和会话等来规避状态行为,但这些方法仍然需要与服务器建立新的连接来获取新数据

有一些正在开发的技术允许web服务器在新数据可用时(WebSocket、服务器发送的事件等)立即将其“推送”到客户端,但这些技术在大多数情况下仍处于起草阶段,浏览器支持充其量只是零碎的


您唯一真正的选择是使用刷新元标记轮询服务器(效率极低!),使用AJAX轮询服务器(更好,因为您可以将其设计为仅获取已更改但仍不理想的数据),或者使用在新数据可用之前保持空闲的长时间AJAX连接,此时,数据被下载,连接被关闭,新连接被打开,以闲置更多数据(将允许立即响应,但很难正确设置)

下游HTML无法“侦听”数据库级别的更改。但是,您可以实现一个Ajax解决方案来定期刷新数据库中的记录。然后我必须问,聊天室是如何实现的,就像chatropolis的聊天室一样?HTML本身在发送到客户端后就无能为力了。之后的任何更改都涉及AJAX打电话回家获取最新数据。。。可能每秒都有一个js调用(甚至更频繁)。我不知道“chatropolis”是如何具体实现这种解决方案的。每秒(或更频繁地)调用AJAX并不是一个好主意。您可能需要考虑某种双向通信方法,例如“使用一个持久的Ajax连接,直到新数据可用,数据下载,连接关闭,新的连接被打开以等待更多的数据。(将允许立即响应,但难以正确设置)。”-------->你能给我一些关于这方面研究的关键词吗?我想这正是我要寻找的。它被称为长轮询的AJAX。它有时也被称为Comet,尽管它实际上只是可用于实现Comet的几种技术之一。对Comet做了一些快速的研究,但有一些问题。从我所看到的来看它的核心是一个无限循环,通过服务器页面不断检查文件修改日期是否已更改。当然还有其他内容,但从我所看到的来看,它是更新的核心。无限循环有一个可能100毫秒的小中断,以避免阻塞cpu。但是如果我们谈论的是100个用户访问我的应用程序,那么实际上,我想知道这是否会覆盖服务器的CPU。在AJAX代码的中间有无限的循环,这样它会是用户的计算机帮助执行,而不仅仅是服务器。如果我有一个简单的方法,如果有任何变化,每500毫秒检查一次服务器,那不是更好吗?我认为这可能会更好,就像分发所涉及的工作一样。你同意我的观点还是我误解了?Comet在PHP中不容易实现,所以最好避免它。唯一真正的选择是让客户端每隔几秒钟检查一次更改,大约每10秒轮询服务器一次。