让一让让一让,龙卷风来了

概述

Tornado一个基于Python的Web服务框架和异步网络库, 最早开发与FriendFeed公司. 通过利用非阻塞网络 I/O, Tornado 可以承载成千上万的活动连接, 完美的实现了长连接WebSockets, 和其他对于每一位用户来说需要长连接的程序。

安装

# 建议安装在稳定的python版本中
pip install tornado

Tornado的特性

  • 作为Web框架,是一个轻量级的Web框架,其拥有异步非阻塞IO的处理方式。

  • 作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。

  • Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发。

  • Tornado是事件循环驱动。

了解Tornado

1、RequestHandler

封装了对应一个请求的所有信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的成员方法中(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。

2、Application

Tornado Web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给定端口(注意:此时服务器并未开启监听)。

3. tornado.ioloop

tornado的核心io循环模块,封装了Linux的epoll和BSD的kqueue,tornado高性能的基石。

**IOLoop.current():**返回当前线程的IOLoop实例。

IOLoop.start(): 启动IOLoop实例的I/O循环,同时服务器监听被打开。

Tornado项目配置

在基类中通过设置请求头信息来完成跨域,同时在options中设置状态。

指定端口可以写自己喜欢的端口 0-65535,不要选被占用的就可以了。

同时我们可以在项目中用peewee操作数据库(异步)。

import tornado.web
from tornado import httpserver

static_path = os.path.join(os.path.dirname(__file__), "static")
db = peewee_async.PooledMySQLDatabase(DB_NAME, host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASSWORD)

class BaseHandler(tornado.web.RequestHandler):
    """
    声明基类
    """

    def set_default_headers(self):
        """设置请求头信息"""
        self.set_header("Access-Control-Allow-Origin", "*")
        self.set_header("Access-Control-Allow-Headers", "x-requested-with")
        self.set_header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE")


    def options(self, *args):
        self.set_status(204)
        self.finish()
        

class TestHandler(BaseHandler):
    """
    测试视图
    """
    return self.write("hello world!")
        
        
if __name__ == '__main__':
    
    app = tornado.web.Application(
        handlers=[
            (r'/', TestHandler),
        ],
        # 静态资源路径配置
        static_path=static_path,
        debug=True,
    )
    
    # 异步数据库
    app.objects = peewee_async.Manager(db)
    # 声明服务器
    server = httpserver.HTTPServer(app, xheaders=True)
    # 端口指定
    server.listen(8888)
    # 启动ioloop
    tornado.ioloop.IOLoop.instance().start()

Tornado Web程序编写思路

  1. 创建web应用实例对象,第一个初始化参数为路由映射列表。
  2. 定义实现路由映射列表中的handler类。
  3. 创建服务器实例,绑定服务器端口。
  4. 启动当前线程的IOLoop。

总结

Tornado框架比flask还要快,当然任何事物的发展都有其局限性,作为一个web开发人员,我们有必要掌握这门技术,同时,在Tornado框架中我们可以和peewee一起使用,提高效率。上面我构建了一个测试视图类,我们找到项目入口文件,输入python 文件名即可启动项目,视图类我们可以写在别的文件里面,这样我们的代码易读性就大大提高了。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楼下安同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值