Tornado简介

article/2025/9/19 15:43:44

在这里插入图片描述
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是一个轻量级框架,它的模块不多最重要的模块是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://chatgpt.dhexx.cn/article/27glTeO3.shtml

相关文章

【小白教程】win10系统如何开启ipv6

Teredo 是一种网络协议,用于在客户端和服务器之间建立安全通信,并且在使用网络地址转换 (NAT) 的路由器后增强设备之间的连接。 #####以下代码均在cmd窗口运行###### 一、设置Teredo 服务器 1、设置Teredo 服务器 netsh interface teredo set state …

Teredo Tunnel Adapter: Error Code 10

Teredo Tunneling 该设备无法启动 错误代码 ErrCode:10 解决方法 前文: Win7 系统,打算开启IPV6,本地连接的网络 ip6 驱动是异常的,先重新安装了网卡驱动。 过程: 几次尝试之后,还是无法启动,…

地平线不能多人联机解决方法

玩地平线4时可能会出现无法连接多人网络问题,在Xbox网络中出现Teredo不合格的问题。 解决方案: 按WinR输入gpedit.msc打开组策略编辑器,依次选择管理模块、网络、TCPIP设置、IPv6转换技术。双击设置6to4状态,点已启用&#xff0c…

微软的teredo服务器,win10系统通过teredo连接ipv6的操作方法

win10系统通过teredo连接ipv6的操作方法? 很多win10用户在使用电脑的时候,会发现win10系统通过teredo连接ipv6的的现象,根据小编的调查并不是所有的朋友都知道win10系统通过teredo连接ipv6的的问题怎么解决,不会的朋友也不用担心&#xff0c…

TCP/IP卷一:55---UDP之(UDP与IPv6、Teredo)

前一篇文章(https://blog.csdn.net/qq_41453285/article/details/103984794)对UDP和UDP数据报、UDP校验和做了简单的介绍,本片文章介绍一些UDP与IPv6有关的知识 一、IPv6下的UDP 考虑到简单性,在对IPv6而非IPv4进行操作时&#…

miredo - Teredo IPv6 tunneling for Unix

世界 IPv6 日:2011年6月8日 Test your IPv6:http://test-ipv6.com 安装miredo sudo apt-get install miredo 编辑miredo配置文件,加入teredo 的公共服务器地址,如ServerAddress teredo-debian.remlab.net sudo gedit /etc…

teredo 未能解析服务器名,Win10系统Xboxlive显示Teredo无法进行限定怎么解决

有的朋友会在windows10电脑上用Xbox live游玩游戏,但是碰到Xbox live设置显示Teredo无法进行限定,这时候我们该怎么办呢,下面由小编给大家介绍如何解决win10系统Xbox live显示Teredo无法进行限定。 具体步骤如下: 1.按下键盘上的&…

报PING:传输失败。常见故障.connect:network is unreachable“的解决方案-IPv6无法ssh连接的解决方案。

vultr当前2.5美金的vps只有IPv6,很多使用者无法正常使用ssh连接等,报PING:传输失败。常见故障。connect:network is unreachable 很多使用者不知所措,笔者也是一脸懵逼,经过一番研究之后,发现了…

微软的teredo服务器,win10系统通过teredo连接ipv6的具体教程

有关win10系统通过teredo连接ipv6的操作方法想必大家有所耳闻。但是能够对win10系统通过teredo连接ipv6进行实际操作的人却不多。其实解决win10系统通过teredo连接ipv6的问题也不是难事,小编这里提示两点:1、在“开始”里输入“cmd”,右击&am…

Win11地平线4 Xbox live无法登录?或者地平线4无法使用在线模式?尝试一波!!!

全是抄袭,只做整理,希望帮到大家,啥也不懂!但是!我就是这样弄好的 侵权 联系 我 就下架,但是只是想让大家可以解决问题 以下是我参照的文章: XBOX NAT类型:Teredo不合格解决方案 - 知乎 (zhi…

Win7使用teredo连接IPv6的方法

(1) 在 ” 开始 ”->” 运行 ” 中输入 cmd 打开 Windows 命令行。在命令行中输入 ipconfig /all ,会出现若干网络配置信息,找到 Tunnel adpter (隧道适配器) Teredo Tunneling Pseudo-Interface , 查看它是否有正确…

关于Win10用户地平线线上连接xbox live失败问题

问题描述 游玩地平线系列游戏时,无法进入线上游戏游玩更多游戏内容,且无法与朋友联机,问题未知,并且更改加速器节点也没有用。本解决方案针对Win10的小伙伴,Win11的小伙伴可以参考一下。 解决方案 主要是解决xbox网络…

关于解决NAT 类型显示“Teredo 无法获得资格”的一个案例

在试过了网上很多的方法之后,发现依旧解决不了,最后发现了xbox官方的一个解决方法并且成功。(这个是在完成了网上众多方法的前提下才解决的) 链接:Xbox Support。 其中我估计解决方案2到5就是网上众多的解决方法,由于本…

teredo报文格式

teredo报文是一项 IPv6 / IPv4 过渡技术,为能够通过 IPv4 NAT, IPv6 数据包作为基于 IPv4 的用户数据包协议(UDP) 消息发送出去。 格式如下: 注意,外层为V4报文,内层为V6报文,V4报文后的UDP报文的目的端口…

Teredo 概述

Teredo 概述 发布日期: 2004年05月14日 摘要 了解 Teredo (又成为面向 IPv6 的 IPv4 NAT [网络地址转换]穿越,是一项 IPv6 / IPv4 过渡技术,在 IPv6 / IPv4 主机位于一个或多个 IPv4 NAT 之后时,用来为单播 IPv6 连接提…

Java学习-java中的与或非

文章目录 前言一、 与(&)和短路与(&&)(1)概念与区别(2)代码示例 二、或(|)与短路或(||)(1)概念与…

python中的与或非详解

python中的逻辑判断与或非和其他语言的逻辑判断结果有一点不同,这一不小心就让中了招,有时候迷惑为什么结果与预测的结果大相径庭,既然是吃饭的手段,还是要认真的专研一下,以免出去让人看了笑话。 先来一组对比&#…

apriori算法代码python_Apriori算法原理及Python代码

一、Apriori算法原理 参考:Python --深入浅出Apriori关联分析算法(一)​www.cnblogs.com 二、在Python中使用Apriori算法 查看Apriori算法的帮助文档: from mlxtend.frequent_patterns import apriori help(apriori) Help on function apriori in module mlxtend.frequent_pa…

机器学习(10): Apriori算法 小结及实验

文章目录 1 Apriori算法简介2 关联分析简介2.1 关联分析2.2 频繁项集的度量标准2.2.1 支持度2.2.2 置信度 2.3 关联规则 3 Apriori算法原理3.1 先验原理3.2 Apriori 算法流程 4 实验4.1 使用Apriori算法来发现频繁项集4.1.1. 生成候选项集4.1.2 完整的Apriori算法 参考资料 注&…

Apriori算法实例

Apriori算法实例 学习Apriori算法首先要了解几个概念:项集、支持度、置信度、最小支持度、最小置信度、频繁项集。 支持度:项集A、B同时发生的概率称之为关联规则的支持度。 置信度:项集A发生的情况下,则项集B发生的概率为关联…