• 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()
  • 相关阅读:
    最少说服人数(二分+贪心)
    线段树或树状数组或归并(逆序对)
    线段树(区间更新,区间询问,节点存最小值)
    【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现
    【hibernate】spring+ jpa + hibername 配置过程遇到的问题
    【方言】Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    【Bean】 这才是bean,一直没仔细看
    【spring配置】 一组配置文件引出的问题
    org.springframework.web.servlet.view.InternalResourceViewResolver
    org.springframework.orm.jpa.JpaTransactionManager
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7008642.html
Copyright © 2020-2023  润新知