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资源消耗。

  1. 每个连接分配一个独立的线程/进程
  2. 同一个线程/进程同时处理多个连接

  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的主要内容,如果未能解决你的问题,请参考以下文章