Tornado——入门篇

第一天(hello tornado)

环境

习惯用python2,所以安装6.0以下版本的tornado(6.0以上最低3.5)
pip install tornado==5.1.1

demo跑起来

在这里插入图片描述
执行python ./test1.py

测试一下

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST,PUT等方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

  • -A/–user-agent 设置用户代理发送给服务器,即告诉服务器浏览器为什么
  • -basic 使用HTTP基本验证
  • –tcp-nodelay 使用TCP_NODELAY选项
  • -e/–referer 来源网址,跳转过来的网址
  • –cacert 指定CA证书 (SSL)
  • –compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地
  • -H/–header 自定义头信息传递给服务器
  • -I/–head 只显示响应报文首部信息
  • –limit-rate 设置传输速度
  • -u/–user <user[:password]>设置服务器的用户和密码
  • -0/–http1.0 使用HTTP 1.0

curl -X PUT www.baidu.com
curl -X DELETE www.baidu.com
curl -X POST www.baidu.com -d “key=value&key1=value1”
curl -X GET www.baidu.com
-X 指定请求方式 -d 添加参数

curl localhost:8000/
Hello, Welcome to the world of tornado!
curl -X POST localhost:8000/
My name is tornado !
关于代码

上述的一个简单web服务主要包含了两个模块

  • tornado.web 这是一个tornado中的web模块

    • RequestHandler
      不同于django,tornado将request与response都封装在了requesthandler中,它封装了对应一个请求的所有信息和方法,write方法是写入响应信息;对于请求方式不同,将不同的逻辑写入到与方法同名的成员方法中,当未重写同名的成员方法时,将会返回 405 方法不被准许错误。
    • Application
      它是tornado web框架的核心应用类,是与服务器对接的接口,保存有路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给定端口(注意:此时服务器并未开启监听)。
  • tornado.ioloop tornado的核心io循环模块
    它封装了Linux的epoll和BSD的kqueue,tornado高性能的基石。
    在这里插入图片描述

    • IOLoop.current() 返回当前线程的IOLoop实例。
    • IOLoop.start() 启动IOLoop实例的I/O循环,同时服务器监听被打开。
  • tornado.options 从命令行中读取设置
    它的用法如下:

from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
.
.
.
tornado.options.parse_command_line()
.
http_server.listen(options.port)
.

如果一 个与 define 语句中同名的设置在命令行中被给出,那么它将成为全局 options 的一个 属性。如果用户运行程序时使用了–help 选项,程序将打印出所有你定义的选项以及 你在 define 函数的 help 参数中指定的文本。如果用户没有为这个选项指定值,则使 用default的值进行代替。Tornado使用type参数进行基本的参数类型验证,当不合

适的类型被给出时抛出一个异常。因此,我们允许一个整数的 port 参数作为 options.port 来访问程序。如果用户没有指定值,则默认为 8000。

总结

1 创建请求处理类,继承handler类,重写相应方法
2 创建web应用实例对象,定义路由映射列表
3 绑定端口
4 开启监听服务

Tornado——第二天(关于端口绑定)

回顾

在创建完一个基础的web应用后,我们使用 app.listen() 方法来将 web服务与端口绑定。
这个地方的listen() 方法只是一个封装后的简写形式。
这个绑定过程的原始形式如下:

# app.listen(8000)
http_server = tornado.httpserver.HTTPServer(app) 
http_server.listen(8000)

首先使用了tornado中的http模块为 app 创建了一个 http服务实例。然后将这个服务与8000端口绑定

开启多进程

我们上述都是为tornado开启了一个进程,如果想开启多个线程的话,需要做以下操作:

http_server = tornado.httpserver.HTTPServer(app) 
http_server.bind(8000)
http_server.start(0)

http_server.start(num_processes=1)方法指定开启几个进程,参数num_processes默认值为1,即默认仅开启一个进程;如果num_processes为None或者<=0,则自动根据机器硬件的cpu核芯数创建同等数目的子进程;如果num_processes>0,则创建num_processes个子进程。
而以前使用的简写形式与listen形式则相当于

http_server.bind(8000)
http_server.start(1)

关于多进程形式,因为子进程是从父进程中复制的ioloop实例,所以在创建子进程前如果更改了父进程的ioloop实例,那么每一个子进程都将受影响。

Tornado——第三天(参数传递)

tornado获取参数大致有三种形式:

  • 路由表中正则获取
# _*_ coding:utf-8 _*_

import tornado.web
import tornado.ioloop
import tornado.httpserver
from tornado.options import define,options

# 定义初始端口(默认8000)
define("port", default=8000,help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
	
	def get(self,params1):
		self.write("i get a params: %s"%params1)


if __name__ == "__main__":
	tornado.options.parse_command_line()
	app = tornado.web.Application(
                handlers=[
                    (r"/(\w*)", IndexHandler),
                    ]
                )
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.listen(options.port)
        tornado.ioloop.IOLoop.current().start()

在这里插入图片描述

  • 通过内置方法获取
# _*_ coding:utf-8 _*_
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值