当前位置: 首页 > 面试题库 >

如何显示连续不断的实时更新,例如Facebook代码,meetup.com主页呢?

宦博雅
2023-03-14
问题内容

如何在浏览器,meetup.com主页之类的浏览器中显示连续的实时更新?在python,PHP,node.js中,对服务器端的性能有何影响?如果页面被像akamai这样的CDN缓存,我们又如何实现相同的更新呢?


问题答案:

您有两个选择(其他选择已在上面详述)。如果您不熟悉每个选项背后的一些概念性想法,我想我会就它们给出一两行。请注意,我是在非常非常高的层次上介绍这些概念。

您的三个选择是:

  1. 短轮询
  2. 网络插座
  3. 彗星/长轮询

短轮询 通过强制客户端向表单服务器连续发送请求,从而克服了客户端与服务器之间的单向通信:

Client: Do you have a message for me?
Server: No.
Client: (wait x seconds)
Client: Do you have a message for me?
Server: No.
Client: (wait x seconds)
Client: Do you have a message for me?
Server: Yes. Here it is!
Client: Yay!
Client: (update message)

代表客户的持续na叫 轮询
。为了实现此结构,您需要将服务器设置为“侦听”来自客户端的这些轮询请求。服务器还必须将这些消息存储在某个地方,以便在消息准备就绪时,服务器可以传递它们。在非常简单的级别上,您的服务器需要:

  • 接受一般的网络请求
  • 接受轮询请求
  • 运行后台作业以获取消息
  • 将这些消息存储在某处,以便在收到轮询请求时,服务器可以对其进行检查。

您还需要将这些轮询请求与用户的某种会话ID绑定在一起,以便正确的消息到达正确的人。总体而言,该范式很复杂,我认为效率很低。

网络插座

Web套接字是HTML5的新功能。它们背后的基本思想是,客户端可以保持与服务器的直接连接,并且它们可以相互来回 推送
信息。因此,与通常的情况不同:客户端发送GET请求>>服务器以内容进行响应,Web套接字使您可以保持连续的对话。

为了进行此设置,您需要:

  • 兼容WebSocket的浏览器(并非全部)。
  • 可以处理Web套接字的服务器(不确定如何明确说明,但并非所有服务器都针对这种设置而设置)。

设置有些复杂,尽管比长轮询更简单:

  • 客户端维护与已启用Web套接字的服务器的连接
  • 服务器通过Web套接字 结果 送到客户端
  • 客户端根据结果更新页面

您将看到称为“ 推送通知”的 这种模式(当然,如果您拥有iPhone,您会遇到这种情况),因为服务器已被授权 “内容”
送到客户端(多么不礼貌!)。由于客户端和服务器之间存在许多细微差别,因此我建议您测试一下Pusher之类的东西,它基本上是一种Web服务,用于处理Web套接字的所有困难部分。在您自己进行设置之前,这将是您测试并使用模式的一种简便方法。它同时具有客户端和服务器端库。

希望这些信息能为您解决问题提供基线。其他答案对如何解决每种情况有更直接的信息。

彗星/长轮询

Web套接字的另一种看似跨浏览器的方法是长轮询(请参阅Comet)。在这种情况下,您的客户端将建立与服务器的连接,并使其保持挂起状态,等待数据被推送回去。这样做的设置有些复杂,但确实代表了
Short PollingWeb Sockets 之间的中间立场。



 类似资料:
  • 本文向大家介绍python如何求数组连续最大和的示例代码,包括了python如何求数组连续最大和的示例代码的使用技巧和注意事项,需要的朋友参考一下 题目描述: 一个有 n 个元素的数组,这 n 个元素既可以是正数也可以是负数,数组中连续的一个或多个元素可以组成一个连续的子数组,一个数组可能有多个这种连续的子数组,求子数组的最大值。例如,对于数组 [1,-2,4,8,-4,7,-1,-5] 而言,其

  • 本文向大家介绍JavaScript实时更新当前的时间的示例代码,包括了JavaScript实时更新当前的时间的示例代码的使用技巧和注意事项,需要的朋友参考一下 实现的效果如下: 时间会实时更新 具体的JS代码如下 在控制台上可以实时的打印出当前的时间和星期 ps:js获取当前时间并实时刷新 效果如图: 代码如下: 到此这篇关于JavaScript实时更新当前的时间的文章就介绍到这了,更多相关js

  • 问题内容: 我希望能够访问网页,它将运行python函数并在网页中显示进度。 因此,当你访问网页时,你可以看到脚本的输出,就像你从命令行运行脚本一样,并在命令行中看到输出。 我需要在功能中做什么? 我需要在模板中做什么? 编辑: 我正在尝试将Markus Unterwaditzer的代码与模板一起使用。 Python代码 它可以运行,但我在浏览器中看不到任何内容。 问题答案: 这是一个非常简单的应

  • 本文向大家介绍Java实现的断点续传功能的示例代码,包括了Java实现的断点续传功能的示例代码的使用技巧和注意事项,需要的朋友参考一下 代码中已经加入了注释,需要的朋友可以直接参考代码中的注释。下面直接上功能实现的主要代码: 下面是测试代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我在JSF页面中有这3个字段 我也有一个具有以下属性的后备豆: 我希望在将某些值插入字段val1和val2中而不刷新页面时,outputText元素自动更改其值。结果变量应以这种方式计算(它正在计算百分比):(val1 * val2)/ 100 您能帮我解决我的一些疑问吗?: 我知道为此,我需要javascript或AJAX之类的东西。您认为最好的方法是什么? 我很想知道我如何使用AJ

  • 本文向大家介绍WPF如何绘制光滑连续贝塞尔曲线示例代码,包括了WPF如何绘制光滑连续贝塞尔曲线示例代码的使用技巧和注意事项,需要的朋友参考一下 1.需求 WPF本身没有直接把点集合绘制成曲线的函数。可以通过贝塞尔曲线函数来绘制。   贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。当然在一些比较成熟的位图软件中也有贝塞尔曲线工