zoukankan      html  css  js  c++  java
  • Tornado 网站demo 一

    web服务器的工作过程

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

    案例

    #!/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 ')
    
    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()
    • tornado.httpserver:这个模块就是用来解决 web 服务器的 http 协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado 的非阻塞、单线程的特点在这个模块中体现。
    • tornado.ioloop:这个也非常重要,能够实现非阻塞 socket 循环,不能互通一次就结束呀。
    • tornado.options:这是命令行解析模块,也常用到。
    • tornado.web:这是必不可少的模块,它提供了一个简单的 Web 框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。
    import tornado.ioloop
    import tornado.web
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write("Hello, world")
    
    def make_app():
        return tornado.web.Application([
            (r"/", MainHandler),
        ])
    
    if __name__ == "__main__":
        app = make_app()
        app.listen(8888)
        tornado.ioloop.IOLoop.current().start()

    建立一个目录,在这个目录中建立一些子目录和文件。

    • handlers:在这个文件夹中放后端 Python 程序,主要处理来自前端的请求,并且操作数据库。
    • methods:准备放一些函数或者类,比如用的最多的读写数据库的函数,这些函数被 handlers 里面的程序使用。
    • statics:准备放一些静态文件,比如图片,css 和 javascript 文件等。
    • templates:放模板文件,都是以 html 为扩展名的,它们将直接面对用户。

     url.py

    #!/usr/bin/env Python
    # coding=utf-8
    """
    the url structure of website
    """
    
    from handlers.index import IndexHandler
    
    url = [
        (r'/', IndexHandler),
    ]

    application.py 文件

    #!/usr/bin/env Python
    # coding=utf-8
    
    from url import url
    
    import tornado.web
    import os
    
    settings = dict(
        template_path = os.path.join(os.path.dirname(__file__), "templates"),
        static_path = os.path.join(os.path.dirname(__file__), "statics")
        )
    
    application = tornado.web.Application(
        handlers = url,
        **settings
        )

    server.py 文件

    #!/usr/bin/env Python
    # coding=utf-8
    
    import tornado.ioloop
    import tornado.options
    import tornado.httpserver
    
    from application import application
    
    from tornado.options import define, options
    
    define("port", default = 8000, help = "run on the given port", type = int)
    
    def main():
        tornado.options.parse_command_line()
        http_server = tornado.httpserver.HTTPServer(application)
        http_server.listen(options.port)
        print ("Development server is running at http://127.0.0.1:%s" % options.port)
        print ("Quit the server with Control-C")
        tornado.ioloop.IOLoop.instance().start()
    
    if __name__ == "__main__":
        main()
  • 相关阅读:
    Android底部菜单栏的两种实现方式 附完整源码
    如何创建WebView
    实现 unity MonoBehaviour API5.4 的消息
    linux常用命令2
    Mac 自带的Apache php 狼神的
    高频sql语句汇总。不断更新。。
    4.数据库mysql相关
    Android keystore文件查看应用签名md5
    Java 多线程进阶-并发协作控制
    Java 多线程进阶-并发数据结构
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7008642.html
Copyright © 2011-2022 走看看