第五节:异步Web服务.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章:异步Web服务 到⽬前为⽌,我们已经看到了许多使Tornado成为⼀个Web应⽤强有⼒框架的功能。它 的简 性、易⽤性和便捷性使其有⾜够的理由成为许多Web项⽬的不错的选择。然 ⽽,Tornado受到最多关注的功能是其异步取得和提供内容的能⼒,它有着很好的理 由:它使得处理⾮阻塞请求更容易,最终导致更⾼效的处理以及更好的可扩展性。在 本章中,我们将看到Tornado异步请求的基础,以及⼀些推送技术,这种技术可以使 你使⽤更少的资源来提供更多的请求以编写更简 的Web应⽤。 5.1 异步Web请求 5.1.1 从同步开始 5.1.2 阻塞的困扰 5.1.3 基础异步调⽤ 5.1.4 异步装饰器和finish⽅法 5.1.5 异步⽣成器 5.1.6 异步操作总结 5.2 使⽤Tornado进⾏长轮询 5.2.1 长轮询的好处 5.2.2 ⽰例:实时库存报告 5.2.3 长轮询的缺陷 5.3 Tornado与WebSockets 5.3.1 Tornado的WebSocket模块 5.3.2 ⽰例:使⽤WebSockets的实时库存 5.3.3 WebSockets的未来 5.1 异步Web请求 ⼤部分Web应⽤ (包括我们之前的例⼦)都是阻塞性质的,也就是说当⼀个请求被处 理时,这个进程就会被挂起直⾄请求完成。在⼤多数情况下,Tornado处理的Web请求 完成得⾜够快使得这个问题并不需要被关注。然⽽,对于那些需要⼀些时间来完成的 操作 (像⼤数据库的请求或外部API ),这意味着应⽤程序被有效的锁定直⾄处理结 束,很明显这在可扩展性上出现了问题。 不过,Tornado给了我们更好的⽅法来处理这种情况。应⽤程序在等待第⼀个处理完 成的过程中,让I/O循环打开以便服务于其他客户端,直到处理完成时启动⼀个请求并 给予反馈,⽽不再是等待请求完成的过程中挂起进程。 为了实现Tornado的异步功能,我们构建⼀个向Twotter搜索API发送 TTP请求的简 Web应⽤。这个Web应⽤有⼀个参数q作为查询字符串,并确定多久会出现⼀条符合搜 索条件的推⽂被发布在Twitter上 (每秒推数)。确定这个数值的⽅法⾮常粗糙,但 ⾜以达到例⼦的⽬的。图5-1展⽰了这个应⽤的界⾯。 图5-1 异步 TTP⽰例:推率 我们将展⽰这个应⽤的三个不同版本:⾸先,是⼀个使⽤同步 TTP请求的版本,然 后是⼀个使⽤带有回调函数的Tornado异步 TTP客户端版本。最后,我们将展⽰如何 使⽤Tornado 2.1版本新增的gen模块来使异步 TTP请求更加清晰和易实现。为了理解 这些例⼦,你不需要成为关于Twitter搜索API的专家,但⼀定的熟悉不会有害。你可 以在https://dev .twitter .com/docs/api/ 1/get/search 阅读关于搜索API的开发者⽂档。 5.1.1 从同步开始 代码清 5-1包含我们的推率计算器的同步版本的代码。记住我们在顶部导⼊了 Tornado的httpclient模块:我们将使⽤这个模块的 TTPClient类来执⾏ TTP请求。之 后,我们将使⽤这个模块的Async TTPClient 。 代码清 5-1 同步 TTP请求:tweet_rate .py import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.httpclient import urllib import json import datetime import time from tornado.options import define, options define(port, default=8000, help=run on the given port, type=in class ndexHandler(tornado.web.RequestHandler): def get(self):

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档