Tornado介绍

文章目录

    • 特点
    • 结构
    • Tornado实现异步原理
    • 模块
    • Tornado服务器的三个底层核心模块
    • 设计模型

在这里插入图片描述
Tornado龙卷风是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的

  • Tornado是使用Python编写的Web服务器兼Web应用框架
  • 与主流Web服务器框架不同的是,Tornado是异步非阻塞式服务器,得益于非阻塞式和对epoll模型的运用
  • Tornado是实时Web服务的一个理想框架,它非常适合开发长轮询、WebSocket和需要与每个用户建立持久连接的应用

特点

  • 轻量级Web框架

  • 异步非阻塞IO处理方式

  • Tornado采用的单进程单线程异步IO的网络模式,其高性能源于Tornado基于Linux的Epoll(UNIX为kqueue)的异步网络IO

  • 出色的抗负载能力

  • 不依赖多进程或多线程

  • WSGI全栈替代产品
    WSGI把应用(Application)和服务器(Server)结合起来,Tornado既可以是WSGI应用也可以是WSGI服务

  • 既是WebServer也是WebFramework

Tornado是基于Bret Taylor和其他人员为FrientFeed所开发的网络服务框架,当FriendFeed被Facebook收购后得以开源。不同于那些最多只能达到1w并发连接的传统网络服务器。Tornado在设计之初就考虑到了性能因素,旨在解决C10K问题,这样的设计使其成为一个拥有高性能的框架

结构

  • Web框架
    主要包括RequestHandler用于创建Web应用程序和各种支持类的子类
  • HTTP服务器与客户端
    主要包括HTTPServer和AsyncHTTPClient
  • 异步网络库
    主要包括IOLoop和IOStream作为HTTP组件的构建块
  • 协程库
    Tornado的Web框架和HTTP服务器一起提供了完整的堆栈替代方案WSGI

Tornado实现异步原理

  1. 每个请求过来就会创建一个socket对象,并yield一个future对象,然后tornado就处理下一个连接了
  2. tornado内部会以socket对象为key,future对象为value加入字典
  3. tornado内部调用epoll方法监听这个全局字典,有socket对象变化就会执行future.set_result(’…’)
  4. 执行future.set_result(’…’)后就会将future.ready标志位变成True,然后就会调用callback方法返回内容

注1:yield 一个 Future对象,那么Tornado会等待,直到执行future.set_result(’…’)才会释放
 
注2:epoll实质是不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程

 
     
Tornado实现异步非阻塞举例

import tornado.ioloop
import tornado.web
from tornado import genclass IndexHandler(tornado.web.RequestHandler):@gen.coroutinedef get(self):self.write('I am index!!')application = tornado.web.Application([(r"/index/", IndexHandler),
])if __name__ == "__main__":print('http://127.0.0.1:8888/index/')application.listen(8888)tornado.ioloop.IOLoop.instance().start()

模块

Tornado是一个轻量级框架,它的模块不多最重要的模块是web,web模块包含了Tornado大部分主要功能的Web框架,其他模块都是工具性质的,以便让Web模块更加有用。

Core Web Framework 核心Web框架

  • tornado.web 包括Web框架大部分主要功能,包括RequestHandler和Application类
  • tornado.httpserver一个无阻塞HTTP服务器的实现
  • tornado.template模板系统
  • tornado.escape HTML、JSON、URLs等编码解码和字符串操作
  • tornado.locale国际化支持

Asynchronous Networking 异步网络底层模块

  • tornado.ioloop 核心IO循环
  • tornado.iostream对非阻塞的Socket的简单封装以方便常用读写操作
  • tornado.httpclient无阻塞的HTTP服务器实现
  • tornado.netutil网络应用的实现主要是TCPServer类

Integration With Other Services 系统集成服务

  • tornado.auth 使用OpenId和OAuth进行第三方登录
  • tornado.databaseMySQL服务端封装
  • tornado.platform.twisted在Tornado上运行Twisted实现的代码
  • tornado.websocket实现和浏览器的双向通信
  • tornado.wsgi其他Python网络框架或服务器的相互操作

Utilities 应用模块

  • tornado.autoload产生环境中自动检查代码更新
  • tornado.gen基于生成器的接口,使用该模块 保证代码异步运行
  • tornado.httputil分析HTTP请求内容
  • tornado.options解析终端参数
  • tornado.process多进程实现的封装
  • tornado.stack_context异步环境中对回调函数上下文保存、异常处理
  • tornado.testing单元测试

Tornado服务器的三个底层核心模块

  • httpserver 服务于web模块的一个简单的HTTP服务器的实现

Tornado的HTTPConnection类用来处理HTTP请求,包括读取HTTP请求头、读取POST传递的数据,调用用户自定义的处理方法,以及把响应数据写给客户端的socket

  • iostream 对非阻塞式的socket的封装以便于常见读写操作

为了在处理请求时实现对socket的异步读写,Tornado实现了IOStream类用来处理socket的异步读写

  • ioloop 核心的I/O循环

Tornado为了实现高并发和高性能,使用了一个IOLoop事件循环来处理socket的读写事件,IOLoop事件循环是基于Linux的epoll模型,可以高效地响应网络事件,这是Tornado高效的基础保证

在这里插入图片描述

设计模型

Tornado不仅仅是一个Web框架,它完整地实现了HTTP服务器和客户端,再此基础上提供了Web服务,它可分为四层:

  • Web框架:最上层,包括处理器、模板、数据库连接、认证、本地化等Web框架所需功能

  • HTTP/HTTPS层:基于HTTP协议实现了HTTP服务器和客户端

  • TCP层:实现TCP服务器负责数据传输

  • Event层:最底层、处理IO事件
    在这里插入图片描述
    使用Tornado可以方便地架构出各种类型的web服务器,以HTTP服务器为例来分析下web服务器的工作方式
    在这里插入图片描述
    一个请求处理的处理过程

  • 服务器绑定bind到特定端口port,然后开始监听listen客户端的请求

  • 当客户端连接connect到来时,会将请求发送给服务器

  • 服务器处理请求完毕后返回响应结果给客户端

当需要处理成千上万的连接的时候,就会遇到典型的The C10K Program问题,常见的解决方案有

  • 一个线程服务多个客户端,使用非阻塞I/O和水平触发的就绪通知
  • 一个线程服务多个客户端,使用非阻塞I/O和就绪改变时通知
  • 一个服务线程服务于多个客户端,使用异步I/O
  • 一个服务线程服务于一个客户端,使用阻塞I/O
  • 将服务代码编译进内核

Tornado采用的方式是“多进程 + 非阻塞 + epoll模式”
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1621504.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Tornado初见(一)

在之前的其他博客中介绍了Django,这里介绍一下Tornado。两者的区别可以总结为: django大而全,适合小型的压力不大的项目,一旦压力上来其是扛不住的,毕竟一是太重,而是非异步。 但是好处就是什么都有&#…

Tornado框架学习

目录 底层原理 select epoll 运行机制 Tornado中的Ioloop模块的作用 获取请求方式 文件上传与展示 通过请求头信息的判断来进行反爬验证 注册功能demo 重定向 用户登录 以及自己设置的错误界面跳转 Cookie Tornado 异步服务器端方式 客户端异步请求 Tornado基于epoll…

tornado入门必备知识总结——异步事件循环与协程

文章目录 前言同步、异步、阻塞和非阻塞socket的非阻塞io请求htmlselect、poll和epoll协程异步http请求tornado实现高并发的爬虫 前言 要想走得远,基础就得牢,路漫漫其修远兮,吾将上下而求索。 tornado简介 python web编程三剑客Django&…

【Tornado】Tornado入门教程

目录 Tornado特点结构三个底层核心模块 安装1. 安装python32. 安装tornado3. 编写简单server4. 运行流程 核心组件1. ioloop实例2. app实例3. urls路由表4. handler类 异步协程async 和 await如何工作的怎样调用 协程模式结合 callbacks调用阻塞函数交叉存取技术循环在后台运行…

【数据结构与算法篇】手撕八大排序算法之交换排序

​👻内容专栏: 《数据结构与算法篇》 🐨本文概括:常见交换排序包括冒泡排序与快速排序,本篇讲述冒泡排序与快速排序的思想及实现、复杂度分析。 🐼本文作者: 花 蝶 🐸发布时间&#…

ie ajax十分卡,解决jquery .ajax 在IE下卡死问题的解决方法

解决jquery .ajax 在IE下卡死问题的解决方法 解决IE编码问题第一步: dataType:($.browser.msie) ? "text" : "xml" 先这样做让IE 识别返回的是text 还是xml 第二步: 复制代码 代码如下: function parseXml(xml) { //XML IE编码问题…

数学分析:场论

我们之前知道的是里斯表示定理。 这里看到,对于多重线性映射,里斯表示定理会从内积变成混合积。当然我们还是只考虑三维以内的情况。 于是我们可以把不同的1形式和2形式的下标写上,表示他们相当于内积或者混合积对应的那个向量。 然后还差0形…

设计师:设计师之家装材料知识之家装八项(吊顶材料、门窗材料、五金材料、墙面材料、地面材料、胶粘材料、油漆材料、水电材料等)之详细攻略

设计师:设计师之家装材料知识之家装八项(吊顶材料、门窗材料、五金材料、墙面材料、地面材料、胶粘材料、油漆材料、水电材料等)之详细攻略 目录 家装八项 吊顶材料 门窗材料 五金材料 墙面材料 地面材料 胶粘材料 油漆材料 水电材料 参考文章:…

材料封样信息流程指引

材料封样信息流程指引 一、材料封样流程 1、新项目中标后,由设计院根据合同、招标文件、技术要求填写材料送样清单(格式按公司标准化标格填写),并正式下发给采购部、工程管理部及项目部安排后续送样确认; 2、幕墙工程…

EyouCMS响应式木材板材公司模板/易优CMS装修材料类企业网站模板

☑️ 编号:ym247 ☑️ 品牌:EyouCMS ☑️ 语言:PHP ☑️ 大小:22.4MB ☑️ 类型:木材板材公司模板 ☑️ 支持:pcwap 🎉 欢迎免费领取(注明编号) 🎉 ✨ 源码介…

2023最新装修材料石膏线品牌加盟类模板源码+织梦内核开发的

正文: 装修材料石膏线品牌加盟类织梦模板,带手机版数据同步。 效果相当的炫酷,相当简洁大气高端。适用于建材网站源码、石英石网站模版,有兴趣的自行去安装体验吧,其它就没什么好介绍的了。 程序: wweohd.lanzouo.com/iRCs80t…

Linux内核学习(十一)—— 进程地址空间(基于Linux 2.6内核)

目录 一、地址空间 二、内存描述符 三、虚拟内存区域 四、操作内存区域 find_vma() mmap() 和 do_mmap():创建地址区间 五、页表 一、地址空间 进程地址空间由进程可寻址并且允许进程使用的虚拟内存组成, 每个进程都有一个 32 位或 64 位的平坦&…

在云原生环境中构建可扩展的大数据平台:方法和策略

文章目录 1. **选择适当的云提供商:**2. **采用容器化和微服务架构:**3. **分层架构设计:**4. **弹性计算资源:**5. **使用分布式计算框架:**6. **数据分区和分片:**7. **使用列式存储:**8. **缓…

java 高级面试题整理(薄弱技术-2023)

session 和cookie的区别和联系 session1.什么是session Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就…

第一讲:工业网络的“语言”——通讯标准

工业网络的“语言”——通讯标准 a) CC-Link CANopen Modbus等; b) 民用网络:TCP-IP协议 c) 民用网络VS工业网络——网络架构: i. 民用网络架构: ii. 工业网络架构: 从网络架构上来看&#xff…

时间敏感网络(TSN)关键协议的介绍

TSN的概述 为了简洁明了,此笔记不再介绍TSN的背景知识。 由于通信主体的演进,各个业务对于时间敏感程度愈加严格。为了构建一个统一的数据链路层协议,通过标准化使其在不同的领域都可以同构运行,提供实时数据的传输保障。 时间…

Arduino ESP32 最简单直接获取网络时间方法

Arduino ESP32 最简单直接获取网络时间方法 ✨在 ArduinoESP32核心支持库当中已经包含相关的获取时间的库,所有获取网络时间,只需要连接好网络,调用相关的库函数即可实现NTP时间的获取,免去的额外加载扩展库的头文件。 &#x1f9…

TCN-时间卷积网络

目录 一、引言 二、时序卷积神经网络 2.1 因果卷积(Causal Convolution) 2.2 膨胀卷积(Dilated Convolution) 2.3 残差链接(Residual Connections) 三、讨论和总结 1. TCN的优点 2. TCN的缺点 参考…

DBeaver的安装和使用:windows版

DBeaver官网下载地址:https://dbeaver.io/download/ 下载完成后, 进入傻瓜式安装: 这里会进入重复界面,一样点击下一步即可 选择安装目录,尽量不要选C盘, 我的电脑只有c盘, 没办法 等待安装完成…

这款远程桌面软件开源了

相信在七八年前,大部分读者都使用 QQ 远程控制电脑。到后面,才接触到一些好用的远程控制产品,比如 Teamviewer、向日葵等。 最近,自己装的远程控制产品试用期到了,便想到去 GitHub 找找有没有可以替代的开源项目&#…