zoukankan      html  css  js  c++  java
  • Tornador之初识(一)

    一、最简单的web服务器

    import socket
    def handle_request(client):
        buf = client.recv(1024)
        client.send("HTTP/1.1 200 OK
    
    ")
        client.send("Hello, Seven")
    def main(): 
      sock
    = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      sock.bind((
    'localhost',8080))
      sock.listen(
    5)

      while True:
        connection, address
    = sock.accept()
        handle_request(connection)
        connection.close()

    if __name__ == '__main__':
      main()

    二、B-S模式浅析:

      1、浏览器其实就是一个socket客户端,而web应用其实就是一个socket服务端,并且web应用在服务器上一直在监听某个端口。

      2、当浏览器请求某个web应用时,需要指定服务器的IP(DNS解析)和端口建立一个socket连接。

      3、建立链接后,web应用根据请求的不同,给用户返回相应的数据。

      4、断开socket连接。(之所以说http是短链接,其实就是因为每次请求完成后,服务器就会断开socket链接)

     三、Tornador的hello world案例

    
    
    import tornado.ioloop
    import tornado.web

    class
    MainHandler(tornado.web.RequestHandler): """ 处理"/"的视图类 """ def get(self): """ get方法的处理 :return: """ self.write("Hello, world") # write方法会直接写到socket中 if __name__ == "__main__": # tornado的视图分发 application = tornado.web.Application([ (r"/", MainHandler), ]) # 后台socket会监听8888端口 application.listen(8888) # 后台的ioloop会不断循环 tornado.ioloop.IOLoop.instance().start()
    • 创建一个Application对象,并把一个正则表达式'/'和类名MainHandler传入构造函数:tornado.web.Application(...)  
    • 执行Application对象的listen(...)方法,即:application.listen(8888)
    • 执行IOLoop类的类的 start() 方法,即:tornado.ioloop.IOLoop.instance().start()

    整个过程其实就是在创建一个socket服务端并监听8888端口,当请求到来时,根据请求中的url和请求方式(post、get或put等)来指定相应的类中的方法来处理本次请求,在上述demo中只为url为http://127.0.0.1:8888/index的请求指定了处理类MainHandler(具体如何寻找见下文)。所以,在浏览器上访问:http://127.0.0.1:8888/index,则服务器给浏览器就会返回 Hello,world ,否则返回 404: Not Found(tornado内部定义的值), 即完成一次http请求和响应。

    由上述分析,我们将整个Web框架分为两大部分:

    • 待请求阶段,即:创建服务端socket并监听端口
    • class MainHandler(tornado.web.RequestHandler):
          """
          处理"/"的视图类
          """
          def get(self):
              """
              get方法的处理
              :return:
              """
              self.write("Hello, world")  # write方法会直接写到socket中

       application = tornado.web.Application([
              (r"/", MainHandler),
          ])
          # 后台socket会监听8888端口
          application.listen(8888)
    • 处理请求阶段,即:当有客户端连接时,接受请求,并根据请求的不同做出相应的相应
     # 后台的ioloop会不断循环
        tornado.ioloop.IOLoop.instance().start()
  • 相关阅读:
    ASIHTTPREQUEST 文档
    本地通知
    ASIHttpRequest 使用过程中,中文编码的问题
    讲讲最近自己的学习,谈谈未来的想法
    关于 ASP.NET MVC 4 如果管理用户
    [转贴]超级懒汉编写的基于.NET的微信SDK
    [转贴]实践:C++平台迁移以及如何用C#做C++包装层
    [转贴]Linq之动态查询
    [转贴]watin的一些例子
    [转贴]xcode帮助文档
  • 原文地址:https://www.cnblogs.com/skiler/p/6866425.html
Copyright © 2011-2022 走看看