2011-12-08 32 views
1

我处于开发某些功能的概念化阶段,但不太确定某个功能。将新元组添加到数据库时自动刷新内容

我在窗体中有一个DIV,我们称之为id ='divComments'。该div包含特定标题的所有评论。它从数据库中检索所有容易做到的数据。

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

如果我想要这个div从数据库提供并在数据库中的关系/表中插入某些内容时自动刷新,该怎么办?所以我打开了我的页面(我不刷新它,只是盯着它)显示可以让x和其他人在特定的数据库表中添加一个元组让我们调用y,我的div现在显示x和y。换句话说,它从数据库更新实时而不刷新。

任何人都有任何想法如何去做这样的事情?

+0

您的下游HTML无法“侦听”数据库级别的更改。但是,您可以实施Ajax解决方案来定期刷新数据库中的记录。 – rdlowrey

+0

好的。那么我必须问一个聊天室如何像大都会那样实施聊天室? –

+0

HTML本身一旦发送给客户端就不能做任何事情。之后的任何更改都会涉及到AJAX打电话给家里以获取最新数据......每秒可能会有一个js呼叫(甚至更频繁)。我不能说“大都会”如何具体实施这样的解决方案。 – rdlowrey

回答

2

HTTP是无状态的。资产通过HTTP连接完成下载后,连接将被销毁,服务器不再了解客户端正在做什么。

有些方法可以使用cookie和会话等方式来伪造有状态行为,但这些方法仍需要与服务器建立新连接才能获取新数据。

有些技术正在开发中,可以让Web服务器在客户端变得可用时立即“推送”新的数据(websockets,服务器发送的事件等),但这些技术仍处于草稿阶段大多数部分和浏览器的支持最多也是参差不齐的。

您唯一真正的选择是使用刷新元标记(EXTREMELY inefficient!)轮询服务器,使用AJAX轮询服务器(更好,因为您可以将其设计为只抓取已更改的数据,但仍不能理想的),或者使用持久的AJAX连接,这个连接保持空闲状态,直到新数据变为可用,此时数据被下载,连接关闭,并且打开一个新连接以闲置以获取更多数据(将允许立即响应,但难以正确设置)。

+0

“或使用持久空闲的AJAX连接,直到新数据可用,在哪一点数据被下载,连接被关闭,并且打开一个新的连接以闲置以获取更多数据(将允许立即响应,但难以正确设置)。“ ---------->你能给我一些关于这方面研究的关键词吗?我想它正是我要找的。 –

+0

它被称为长时间轮询的AJAX。它有时也被称为彗星,尽管它实际上只是可用于实施彗星的几种技术之一。 http://en.wikipedia.org/wiki/Comet_%28programming%29#Ajax_with_long_polling – GordonM

+0

对彗星做了一些快速研究,但有一些问题。从我看到它的核心是与服务器页面的无限循环,以检查文件修改日期是否已更改。当然,还有其他的东西,但从我看到它是更新的核心。无限循环有一个可能100毫秒的小断点,以避免堵塞CPU。 –