《Introduction to Tornado》笔记08 — 长轮询与websockets

使用tornado进行长轮询

  Tornado 异步架构的另一个优势是它能够轻松处理 HTTP 长轮询。这是一个处理实时更新的方法,它既可以应用到简单的数字标记通知,也可以实现复杂的多用户聊天室。
  部署供实时更新的Web应用对于Web程序员而言是一项长期的挑战。更新用户状态、发送新消息ᨀ醒、或者任何一个需要在初始文档完成加载后由服务器向浏览器发送消息方法的全局活动。一个早期的方法是浏览器以一个固定的时间间隔向服务器轮询新请求。
  这项技术带来了新的挑战:轮询频率必须足够快以便通知是最新的,但又不能太频繁,当成百上千的客户端持续不断的打开新的连接会使 HTTP 请求面临严重的扩展性挑战。频繁的轮询使得 Web 服务器遭受"凌迟"之苦。

  所谓的"服务器推送"技术允许 Web 应用实时发布更新,同时保持合理的资源使用以及确保可预知的扩展。对于一个可行的服务器推送技术而言,它必须在现有的浏览器上表现良好。最流行的技术是让浏览器发起连接来模拟服务器推送更新。这种方式的 HTTP连接被称为长轮询或 Comet 请求。

  长轮询意味着浏览器只需启动一个 HTTP 请求,其连接的服务器会有意保持开启。浏览器只需要等待更新可用时服务器"推送"响应。当服务器发送响应并关闭连接后,(或者浏览器端客户请求超时),客户端只需打开一个新的连接并等待下一个更新。

长轮询的好处

  HTTP 长轮询的主要吸引力在于其极大地减少了 Web 服务器的负载。相对于客户端制造大量的短而频繁的请求(以及每次处理 HTTP 头部产生的开销),服务器端只有当其接收一个初始请求和再次发送响应时处理连接。大部分时间没有新的数据,连接也不会消耗任何处理器资源。

  浏览器兼容性是另一个巨大的好处。任何支持AJAX请求的浏览器都可以执行推送请求。不需要任何浏览器插件或其他附加组件。对比其他服务器端推送技术,HTTP 长轮询最终成为了被广泛使用的少数几个可行方案之一。

  我们已经接触过长轮询的一些使用。实际上,前面提到的状态更新、消息通知以及聊天消息都是目前流行的网站功能。像 Google Docs 这样的站点使用长轮询同步协作,两个人可以同时编辑文档并看到对方的改变。Twitter 使用长轮询指示浏览器在新状态更新可用时展示通知。Facebook 使用这项技术在其聊天功能中。长轮询如此流行的一个原因是它改善了应用的用户体验:访客不再需要不断地刷新页面来获取最新的内容。

长轮询的缺陷

  正如我们所看到的,HTTP 长轮询在站点或特定用户状态的高度交互反馈通信中非常有用。但我们也应该知道它的一些缺陷。
  当使用长轮询开发应用时,记住对于浏览器请求超时间隔无法控制是非常重要的。由浏览器决定在任何中断情况下重新开启 HTTP 连接。另一个潜在的问题是许多浏览器限制了对于打开的特定主机的并发请求数量。当有一个连接保持空闲时,剩下的用来下载网站内容的请求数量就会有限制。
  此外,你还应该明白请求是怎样影响服务器性能的。再次考虑购物车应用。由于在库存变化时所有的推送请求同时应答和关闭,使得在浏览器重新建立连接时服务器受到了新请求的猛烈冲击。对于像用户间聊天或消息通知这样的应用而言,只有少数用户的连接会同时关闭,这就不再是一个问题了。

长轮询的应用 —— 展示实时库存

—— 详见5.2章节的具体讲解。

tornado与websockets *****

这篇博客介绍的很详细:https://www.cnblogs.com/wupeiqi/p/6558766.html

posted on 2019-12-11 12:03  江湖乄夜雨  阅读(101)  评论(0编辑  收藏  举报