Uliweb对tornado提供服务的支持

开发服务器的tornado支持

目前uliweb在启动开发服务器时,可以通过:

uliweb runserver --tornado

来启动tornado,并用它来跑uliweb应用。同时还支持reload和ssl。

那么我是如何实现的,在这里描述一下:

修改 manage.py 下的 RunserverCommand 类:

  1. 増加 --tornado 选项支持

  2. 増加对 tornado 模式的支持

     if options.tornado:
         try:
             import tornado
             import tornado.wsgi
             import tornado.httpserver
             import tornado.ioloop
             import tornado.autoreload
         except:
             print 'Error: Please install tornado first'
             sys.exit(1)
    
         if options.ssl:
             ctx = {
                 "certfile": options.ssl_cert,
                 "keyfile": options.ssl_key,
             }
         else:
             ctx = None
    
         container = tornado.wsgi.WSGIContainer(app)
         http_server = tornado.httpserver.HTTPServer(container, 
             ssl_options=ctx)
         http_server.listen(options.port, address=options.hostname)
         loop=tornado.ioloop.IOLoop.instance()
         if options.reload:
             for f in extra_files:
                 tornado.autoreload.watch(f)
             tornado.autoreload.start(loop)
         loop.start()
    

如果需要启动ssl支持,则根据命令行参数(如果没提供则使用缺省的文件名)来生成ssl相关的配置信息。HTTPServer有一个参数是接收ssl的信息的,缺省为None。

使用tornado来跑wsgi的应用,需要使用 wsgi.WSGIContainer 类,wsgi application对应作为参数传进去,它会得到一个对象, 这个对象可以传递给HTTPServer类。

在listen时,可以传入命令行的端口及IP地址。

为了支持reload,需要先创建IOLoop的实例,然后执行 autoreload.start(loop) 。缺省情况下,tonado只处理导入的模块,为了监听象配置文件的变化,可以调用 autoreload.watch(filename) 方法来添加额外的文件名。这里extra_files是uliweb原来就生成好的,主要是配置文件,可以直接拿过来用。

处理好reload之后,启动服务即可。

经过上面的努力,在开发时,可以直接使用tornado来启动uliweb应用了。

生产部署对tornado的支持

如果在生产上想使用tornado来跑uliweb,那可以执行:

uliweb support tornado

这样会在当前的项目目录下拷贝一个叫tornado_handler.py的文件,可以直接用它来运行。它支持 -p port-h host 参数。缺省为 8000 和 127.0.0.1。

转载于:https://my.oschina.net/limodou/blog/164058

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值