【问题标题】:How does Facebook real time works?Facebook 实时是如何工作的?
【发布时间】:2017-10-12 04:28:46
【问题描述】:

我不知道如何正式陈述这个问题,因为我不知道这里实际发生了什么。 每当有任何用户在我的帖子上发表评论时,Facebook 都会发出如下请求以显示该评论,而无需我做任何事情。他们是如何做到的?

https://0-edge-chat.facebook.com/pull?channel=p_100009456028304

这不能是推送通知,因为他们一直在发出拉取请求(我使用浏览器中可用的开发人员工具进行了检查,尽管我 我不确定它是否是推送通知)。他们不断向上述 URL 发出拉取请求。这种技术叫什么? 有人可以帮我理解这一点。 也许这个问题是重复的,并且已经在堆栈溢出时得到了回答。但是 因为我不知道这是什么,所以很难搜索。(我试过但找不到任何东西)

【问题讨论】:

  • 称为长轮询
  • 从我今天研究的关于轮询的情况来看,他们不断地向服务器发出请求以获取任何更新,一旦获得更新,就会将其显示给客户端。
  • 但是有很多东西可能会一次全部更新,所以他们如何提出请求并决定哪个是页面哪个部分的响应(他们收到的更新是为了喜欢。我可以假设他们可能会添加一个参数来表示此更新的目的)他们真的实现了这样的“实时”更新吗?或者轮询是这样完成的?我如何在有限的服务器资源下实现轮询?(因为轮询可能会产生开销在服务器上)
  • @WizKid 我如何为 android 应用程序实现长轮询?

标签: facebook real-time publish-subscribe


【解决方案1】:

正如 cmets 中所说的那样,这称为长轮询。 简而言之,有 5 种方法可以在网页中实现实时更新:

  1. 网页推送
  2. WebSockets
  3. HTTP 流媒体
  4. HTTP 长轮询
  5. HTTP 轮询

Facebook 正在使用长轮询,轮询超时为 50 秒。 这意味着 HTTP 请求是由浏览器向服务器完成的。如果没有可用的更新,则服务器将请求保持挂起最多 50 秒。这样,一旦有更新可用,就可以将其推送到客户端,而无需等待新的客户端请求(就像在正常轮询中一样)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
相关资源
最近更新 更多