zoukankan      html  css  js  c++  java
  • tornado

    优势:

    1. 轻量级的 web 框架, 和Django比
    2. 性能卓越, 使用 异步非阻塞
    3. 处理 C10K 的场景, C10K : concurrent(并发) 10000 , 能够同一时间处理10000个并发的连接

    和Django对比:
    django tornado
    路由 有 有
    模板 有 有
    视图 有 有
    ORM 有 无
    session 有 无
    cookie 有 有
    form,admin, 中间件等 有 无
    
    
    1. 单个进程打开的文件描述符(fd文件句柄)

    select : 1024
    poll : 稍微比select好一些, 没有限制
    epoll : 没有限制 (1个g内存, 监听10W个端口)


    2. 监听socket的方式:

    select : 轮询, 一个一个的检查, 看有没有活跃, 当线性增加socket的时候,
    轮询的速度就会非常的耗时

    poll : 对select稍微进行了优化, 只是修改了文件描述符,监听方式不变

    epoll : 会将连接的socket注册到epoll中, 相当于socket的花名册, 如果有一个socket活跃了,
    会回调一个函数, 通知epoll,赶紧过来处理


    3. 内存空间拷贝方式:

    select : 需要将数据从内核态拷到用户态, 这个过程比较耗时

    poll : 同上

    epoll : 内存态数据和用户态数据时共享的

    参考博客: https://www.cnblogs.com/jeakeven/p/5435916.html


    import tornado.web
    import tornado.ioloop
    from tornado.options import options,define,parse_config_file,parse_command_line
    import config

    define('port',default=8002,type=int,)

    class IndexHandler(tornado.web.RequestHandler):
    def initialize(self):
    print('hahha')


    def get(self, *args, **kwargs):
    self.write('hello world')
    url=self.reverse_url('index')
    print(url)
    def post(self,*args,**kwargs):

    pass

    class Site(tornado.web.RequestHandler):
    def initialize(self,username):
    self.username = username
    print('hahha')


    def get(self, *args, **kwargs):
    print(self.get_query_argument('pwd',None))
    print(self.username)
    self.write('hello world site')

    def post(self,*args,**kwargs):

    pass






    if __name__ == '__main__':
    # parse_command_line()
    parse_config_file('config')
    app = tornado.web.Application([
    tornado.web.url(r'/site/', Site,{'username':'zzf'}),
    tornado.web.url(r'/index/', IndexHandler,name='index'),

    ])

    app.listen(config.options.get('port'))


    tornado.ioloop.IOLoop.current().start()


    传参与配置
    1.
    from tornado.options import options,define
    define('port',default=8002,type=int,)
    2.命令行
    parse_command_line()
    from tornado.options import options,parse_command_line
    3.文件txt
       parse_config_file('config')

    app.listen(config.options.port)
    4.配置文件
     parse_config_file('config')

    app.listen(config.options.get('port'))











  • 相关阅读:
    转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
    用好spring mvc validator可以简化代码
    接口服务中的日志
    rest api参数与content-type
    【单页应用】全局控制器app应该干些什么?
    【webapp的优化整理】要做移动前端优化的朋友进来看看吧
    【单页应用】理解MVC
    【单页应用】view与model相关梳理
    【单页应用之通信机制】view之间应该如何通信
    【单页应用巨坑之History】细数History带给单页应用的噩梦
  • 原文地址:https://www.cnblogs.com/wrqysrt/p/10974133.html
Copyright © 2011-2022 走看看