Loading

Python学习笔记17—Tornado

实例
#!/usr/bin/env Python
#coding:utf-8
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        greeting = self.get_argument('greeting', 'Hello')
        self.write(greeting + ', welcome you to read: python')
if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

运行该脚本,即可在浏览器访问:

http://localhost:8000

http://localhost:8000/?greeting=keven

 

Web服务器的工作流程

  1. 创建 listen socket, 在指定的监听端口, 等待客户端请求的到来
  2. listen socket 接受客户端的请求, 得到 client socket, 接下来通过 client socket 与客户端通信
  3. 处理客户端的请求, 首先从 client socket 读取 http 请求的协议头, 如果是 post 协议, 还可能要读取客户端上传的数据, 然后处理请求, 准备好客户端需要的数据, 通过 client socket 写给客户端

 

引入模块

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

这四个都是 Tornado 的模块,在本例中都是必须的。它们四个在一般的网站开发中,都要用到,基本作用分别是:


• tornado.httpserver:这个模块就是用来解决 web 服务器的 http 协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado 的非阻塞、单线程的特点在这个模块中体现。


• tornado.ioloop:这个也非常重要,能够实现非阻塞 socket 循环,不能互通一次就结束呀。


• tornado.options:这是命令行解析模块,也常用到。


• tornado.web:这是必不可少的模块,它提供了一个简单的 Web 框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。

 

posted @ 2016-09-27 15:53  头痛不头痛  阅读(275)  评论(0编辑  收藏  举报