Tornador之初始(一)

一、最简单的web服务器

import socket
def handle_request(client):
    buf = client.recv(1024)
    client.send("HTTP/1.1 200 OK\r\n\r\n")
    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.ioloopimport 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并监听端口
  • 处理请求阶段,即:当有客户端连接时,接受请求,并根据请求的不同做出相应的相应
时间: 2024-10-18 21:30:47

Tornador之初始(一)的相关文章

黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [字符串的输入输出] 1.字符串输出: %s-------从给定的地址开始输出字符直到遇到\0停止: printf("%s\n",&a[3]);  printf("%s\n",a); char a[]="hellowo\0rd!"; 2.字符串输入: 从键盘上接收一个字符串,保存在以a为首地址的字符数组中 scanf("%s&

OVS的初始配置

1.去掉bridge模块,为下面用OVS的模块奠定基础 rmmod bridge 2.insmod datapath/linux/openvswitch_mod.ko 3.insmod datapath/linux/brcompat_mod.ko 4.nkdir -p /usr/local/etc/openvswitch OVS的初始配置,布布扣,bubuko.com

初始ASP.NET数据控件【续 ListView】

ListView控件   ListView控件可以用来显示数据,它还提供编辑,删除,插入,分页与排序等功能.ListView是GridView与DataList的融合体,它具有GridView控件编辑数据的功能同时还具有DataList控件的灵活布局的功能.ListView控件的分页功能需要通过DataPager控件来实现. ListView控件的模版 LayoutTemplate:标识定义控件的主要布局的根模版.包含一个占位符对象,如表行(tr),div,span元素.此元素将由ItemTem

企业实战脚本案例2:批量创建用户并设置初始密码

批量创建用户并设置初始密码 目录: 1.脚本功能介绍 2.脚本制作技术需求 2.1 useradd命令 2.2 id命令 2.3 passwd命令 2.4 随机密码 2.5 while循环+case+select 3.脚本编写案例 一.脚本功能介绍 在企业中生产或运维中,经常会遇到VPN服务器.企业网盘.企业邮箱.云桌面私有账号等等一系列的服务器.当批量新员工入职时,经常需要批量账号分配给新员工,若此类账号存储在数据库时,管理员可根据公司账号命名规范通过专有图形化系统进行录入账号,若账号存储在系

Centos7制作docker初始镜像

Centos7用febootstrap制作docker初始镜像包 使用工具:febootstrap 下载地址:http://down.51cto.com/data/2330414 使用命令: febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos7  /tmp/centos-image/  ht

Java变量的初始值

Java中的变量如果没有赋值,成员变量默认被初始化,局部变量则不会. 对于成员变量 int a;         // a的初始值为0 如下例中的成员变量a,b,c,d public class VariableInitialValue { public static void main(String args[]) { TestVariable obj = new TestVariable(); System.out.println("a="+obj.a); System.out.p

微信小程序--获取form表单初始值提交数据

<form bindsubmit="formSubmit"> <view class="txt"> <view class="ima"></view> <view class="txt2">姓名</view> <input placeholder="请输入姓名" maxlength="10" class=&qu

C#中将dateTimePicker初始值设置为空

最近在做一个小项目,有一个功能是根据用户选择条件查询数据,要求时间控件的默认值为空,只有当用户修改了时间,才根据时间查询.简单的说,就是默认或者点击清空按钮的情况下,时间控件dateTimePicker的值为空,当触发事件ValueChanged时再显示相对应的时间. 开始,我以为修改控件的默认值为空就可以了,但是我失败了,dateTimePicker不允许空值.尝试了很多次之后我开始在网上找资料,寻到了如下方法: 窗体初始化或者放一个清空按钮,点击清空按钮时执行如下代码: C#代码 : thi

vagrant初始登录失败的一般性解决方案

vagrant初始登录失败的一般性解决方案 http://www.cnblogs.com/csliwei/p/5860005.html 今天mac机上,遇到的 vagrant halt && vagrant up后 一直卡在: ==> default: Running 'pre-boot' VM customizations...==> default: Booting VM...==> default: Waiting for machine to boot. This