实时显示在线的其他用户?

hel*_*llo 2 php ajax jquery facebook real-time

facebook如何处理他们的"实时"数据?如果您正在查看自己的活动Feed并且用户喜欢某些内容,您可以立即看到文字更改,说明该用户喜欢它,或者当您收到通知后,您会在页面上看到红色通知标记,而不会刷新.

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

$.post('ajax/test.html', function(data) {
  $('.result').html(data);
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ser*_*sev 6

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

基本的想法是这样的:

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

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

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

  • 爱丽丝看到鲍勃的评论,立即发布.

所描述的技术称为"长轮询",它最初由谷歌在Gmail中引入.