php - 实时显示在其他在线用户上?

标签 php jquery ajax facebook real-time

Facebook 如何处理他们的“实时”数据?如果您正在查看事件源并且用户喜欢某些内容,您可以立即看到文本更改,表示该用户喜欢它,或者当您收到通知时,您将在页面上看到红色通知标志,而无需刷新。

我知道这段代码可以在不刷新的情况下推送数据:

$.post('ajax/test.html', function(data) {
  $('.result').html(data);
});

但是有人可以解释如何推送实时数据,以便其他用户无需刷新即可在其页面上看到更新。

谢谢

最佳答案

这可以使用各种技术来实现,这些技术有很多名称:长轮询、服务器发送事件、Comet、WebSocket 等等。

基本思想是这样的:

  • 爱丽丝打开 Facebook。她的浏览器发出更新请求(例如 $.get ),但如果没有新更新,服务器不会响应,并且请求仍处于“等待”状态。

  • 鲍勃打开 Facebook。他决定对爱丽丝的墙发表评论。他的浏览器将他的评论发布到服务器( $.post )。

    • 服务器接受此帖子,并正确处理它(保存到 Alice 的墙上等)
    • 但服务器也会检查是否有来自 Alice 的等待更新请求。如果有,服务器会将有关此更新的信息呈现到响应流中并关闭连接。
  • Alice 的浏览器终于​​得到了对这个长时间挂起的请求的响应,并愉快地在通知区域绘制了一个红色的“1”。它还会立即打开另一个更新请求(不错过任何一个)。

  • Alice 看到了 Bob 立即发送的评论。

所描述的技术称为“长轮询”,它首先由 Google 在 Gmail 中引入。

关于php - 实时显示在其他在线用户上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584744/

相关文章:

php - 带有动态加载的 JQuery 分页

php - 当用户不再在线时更新数据库

php - 对象设计 - PHP 和 SQL 中的用户和访问角色

jquery - onload slideDown of a div, slideUp the div on button click

javascript - 带有 Bootstrap 模式和 AJAX 的 Intro.js

php - 无法实现随机背景图片

javascript - 帮助调整容器中的图像大小

jquery - 如何使用 jquery 增加或减少 div 的高度

javascript - jQuery 跨站抓取

php - php json_encode 和 AJAX 是否破坏了我的数组?