1,简介
Tornado 是一个异步非阻塞的Python web框架,起初由 FriendFeed 开发. 通过使用非阻塞网络I/O, Tornado可以支撑上万级的连接,处理 长连接, WebSockets ,和其他需要与每个用户保持长久连接的应用.
2,安装
conda install tornado
3,应用
import os
from datetime import datetime, timedelta
import tornado.ioloop
import tornado.web
from tornado.options import define, options, parse_command_line
import pymysql
# 定义默认启动的端口port为80
define('port', default=8080, type=int)
class MainHandler(tornado.web.RequestHandler): # 请求进入设置
def initialize(self):
print('初始化')
def prepare(self):
print('prepare')
def get(self):
name = self.get_argument("name")
token = self.request.headers.get("token")
self.write(name + " " + token)
self.write('查询数据')
def post(self):
# 使用request属性
# 取出客户端提交的json字符串
jsonbyte = self.request.body
print('二进制格式json字符串:', jsonbyte)
jsonstr = jsonbyte.decode('utf-8') # 解码
print('json字符串:', jsonstr)
# 从json字符串转换为json对象,然后利用json对象提供的API
# 从json字符串中取出想要的内容
jsonobj = json.loads(jsonstr)
day = jsonobj.get('day') # 取出值
self.write('day = {}'.format(day))
self.write('post方式请求')
self.write('新增数据')
def delete(self, month, year, day):
self.write('删除数据')
def patch(self, month, year, day):
self.write('修改部分')
def put(self, month, year, day):
self.write('修改全部')
def on_finish(self):
print('请求结束')
def make_app():
# handlers参数中定义路由匹配地址
return tornado.web.Application(handlers=[
(r'/', MainHandler)],
template_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates') # 选择导航
)
if __name__ == '__main__':
#解析启动命令, python xx.py --port=端口号
parse_command_line()
# 启动
app=make_app()
# 监听端口
app.listen(options.port)
# 监听启动的IO实例
tornado.ioloop.IOLoop.current().start()
4,ab压力测试
yum -y install httpd-tools # centos
sudo apt-get install apache2-utils # ubuntu
ab -V # 查看版本
ab -c 10 -n 100 http://www.myvick.cn/index.php # 同时处理100个请求并运行10次index.php
# -c 10表示并发用户数为10
# -n 100表示请求总数为100
5,参考
1,http://shouce.jb51.net/tornado/ch1.html
2,https://tornado-zh.readthedocs.io/zh/latest/