tornado1
Posted xuezhihao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tornado1相关的知识,希望对你有一定的参考价值。
1.基本操作
2.自定义开源组件
- session
- form表单验证(*)
3.自定义异步非阻塞web框架
import tornado.ioloop import tornado.web # 定义处理类型 class MainHandler(tornado.web.RequestHandler):
# 添加一个处理get请求方式的方法 def get(self):
# 向响应中添加数据 self.write("dddddd")
self.rander("main.html") def make_app():
# 返回一个应用对象 return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app()
# 监听端口 app.listen(8888)
# 启动web程序,开试监听端口的连接 tornado.ioloop.IOLoop.current().start()
C10k问题:
新到来一个TCP连接,就需要分配一个进程。假如有C10K,就需要创建1W个进程,可想而知单机是无法承受的。那么如何突破单机性能是高性能网络编程必须要面对的问题,进而这些局限和问题就统称为C10K问题
当创建的进程或线程多了,数据拷贝频繁(缓存I/O、内核将数据拷贝到用户进程空间、阻塞,进程/线程上下文切换消耗大, 导致操作系统崩溃,这就是C10K问题的本质。
解决C10K问题的关键就是尽可能减少这些CPU资源消耗。
- 每个连接分配一个独立的线程/进程
- 同一个线程/进程同时处理多个连接
Linux 系统需要修改内核参数和系统配置, 才能支持 C1000K. C1000K 的应用要求服务器至少需要 2GB 内存, 如果应用本身还需要内存, 这个要求应该是至少 10GB 内存. 同时, 网卡应该至少是万兆网卡.
优点:
一个url对应一个类
轻量级web框架
异步非阻塞IO处理方式
抗负载能力强
不依赖多进程/多线程,一定程度上解决C10k问题
Django和tornado的区别:
Django:功能大而全,注重高效开发,内置管理后台,内置封装完善的ORM操作,session功能,后台管理。缺点:高耦合
tornado:功能少而精,注重性能优越,HTTP服务器,异步编程,websocket
tornado.web:tornado的基础web框架
RequestHandler:封装对请求处理的所有信息和处理方法
get/post:封装对应的请求方式
write:封装响应信息
tornado.ioloop:核心io循环模块,封装linux的epoll和BSD的kqueue,tornado高性能处理的核心。
current()返回当前线程的IOLoop实例对象
start()启动IOLoop实例对象的IO循环,开启监听
httpserver底层处理
httpserver监听端口
tornado.httpserver.HTTPServer(app)
httpserver.listen(port)
app = Application([(r‘/‘,Index)],debug=True)
以上是关于tornado1的主要内容,如果未能解决你的问题,请参考以下文章