Facebook如何检测用户何时收到新消息&对html进行更改?

时间:2012-03-24 10:27:17

标签: html ajax facebook

我是AJAX和PHP的新手,但我知道PHP是一种服务器端脚本语言,因此除非用户刷新页面或用户提交表单,否则不会对html进行任何更改。因此,我认为当Facebook用户收到消息时,<span id="mercurymessagesCountValue">中的号码会发生变化

enter image description here

与AJAX有关。

这是我的猜测:

当检测到另一个用户[发件人]已将新行插入特定表并且每列包含不同数据时,将触发数字更改:时间,消息,发件人ID和接收者ID

所以这是我的问题......在这种情况下,如何检测数据库中的更改以及如何触发javscript [或其他东西]来更改html?或者,如果我错了......我能知道Facebook是如何做到的吗?非常感谢!!

4 个答案:

答案 0 :(得分:4)

如果我的问题正确,您应该查看pullpush型号。 Facebook在推送模式下工作:facebook服务器知道何时收到新消息并将通知推送到客户端(网站在浏览器中打开)。

答案 1 :(得分:1)

让我在这里为你澄清一些事情, AJAX只是浏览器发送的一种请求,用于动态地从另一个页面获取数据。在Facebook的情况下,他们实际上有一种特殊类型的连接到客户端计算机,以保持页面“活着”。这样,他们可以将动态更新推送到客户端,而无需不断地轮询/刷新服务器上的单个页面(会产生大量负载)。

所以,让我们假装,他们不断刷新服务器上的页面,以确定有多少通知未读 -

客户 - &gt; Ajax Call - &gt;服务器PHP页面 - &gt; Ajax Return - &gt;客户端

因此,按顺序,客户端发送对服务器生成的页面的请求。 然后,服务器的php页面将计算该特定用户的数据库中“未读”通知行的数量。然后它将以普通html输出未读行的数量。

客户端然后从Ajax调用中收到这个纯HTML,并使用新的未读通知数更新DOM

请注意:这不是facebook的工作方式,但如果您不熟悉动态编码,它就是如何设置自己的基本通知系统的一个很好的例子。

答案 2 :(得分:0)

我的猜测是,请求经常通过Javascript从客户端发送到主机,询问“自从我上次询问以来有什么新的事情发生?”。答案由服务器响应,使用PHP,如果是,则新数据在响应中传递,JavaScript使用新数据更新DOM(HTML),如显示红旗等。

答案 3 :(得分:-2)

的javascript:location.load(T); (t =时间间隔) 我想,每隔几秒刷新一个页面就会弹出收到的通知.. !!