tornado 入门篇

一、Tornado简介

Tornado是一个由Python开发的Web框架,它是单线程异步的非阻塞服务器,因此速度非常快。

相对一般情况下来说,如果同时连接数Django为8000个左右,那么Tornado为12000个。

二、路由

路由就是路径,一条路线。

通过IP找到服务器,通过端口找到服务。服务都会有一个路由对应一个Handler,在Handler中才执行具体业务逻辑。

比如你去一家会所,会所就是服务器。会所前台妹妹问你需要什么服务,你要打洞,妹妹会指引你去打洞的地方。如果你只是洗澡,妹妹会指引你去洗澡的地方。指引就是路由,一条路线。不同的服务,不同的端口。到了打洞的地方(Handler),洞要怎么打就随你定义了。

Handler:指定请求的资源,相当于Django的视图函数。

端口:如果所有服务都用同一个端口,就像所有的汽车在同一条路开,结果就是堵死,谁都别想好过!那么就用端口去区分具体是哪个服务,你占用了一个端口,那么其他服务就靠边站,去用其他端口。

web服务:正在运行的程序,可以跟别人交互。

Tornado服务:启动起来就是一个服务了。

三、最基本的tornado示例

import tornado.web
import tornado.ioloop
import tornado.options  # 让模块有自定义选项
import tornado.httpserver  # 启动一个单线程的http服务器
from tornado.options import define, options

# 自定义端口
# help是给人看的帮助提示
define("port", default=8888, help="given your port", type=int)

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello World!")

# 路由表
application = tornado.web.Application(
    # s不要漏下,不然找不到路由
    handlers=[
        (r"/", MainHandler),
    ]
)

if __name__ == "__main__":
    tornado.options.parse_command_line()  # 可以通过命令行交互 python xxx.py --port=8888
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)  # 调用自定义端口
    tornado.ioloop.IOLoop.instance().start()

get_arguments() 和 get_argument()

首先看get_arguments()

# 只需改动上诉代码中的MainHandler
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        name = self.get_arguments("name")
        print(name)

在浏览器中输入URL http://47.98.139.237:8888/?name=zyb&name=budong

去后台可以看到打印结果 [‘zyb‘, ‘budong‘]

两个重名的name都得到了

原文地址:https://www.cnblogs.com/quanquan616/p/9489579.html

时间: 2024-11-13 10:02:33

tornado 入门篇的相关文章

《Java从入门到放弃》入门篇:springMVC数据校验

昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. Spring的DataBinder在进行数据绑定时,会同时调用校验框架完成数据校验工作. 具体使用步骤如下: 1)导入数据校验的JAR包 2)在springmvc的配置文件中添加校验Bean 3)修改实体类,在属性上加上校验的注解 4)修改昨天的login4方法,加上校验的相关代码

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

漫游Kafka入门篇之简单介绍

原文地址:http://blog.csdn.net/honglei915/article/details/37564521 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

软件测试系列之入门篇

一.你知道软件测试有多重要吗? 在国际上,软件测试(软件质量控制)是一件非常重要的工程工作,测试也作为一个非常独立的职业.在IBM.Microsoft等开发大型系统软件公司,很多重要项目的开发测试人员的比例能够达到1:2甚至1:4. 在国内软件测试的地位还不够高,并且大多只停留在软件单元测试.集成测试和功能测试上.软件测试从业人员的数量同实际需求有不小差距,国内软件企业中开发人员与测试人员数量一般为5:1,因此,国内的软件测试产业化还有待开发和深掘. 说到这里不知道你反应是高兴还是失望?但是我却

hacker入门篇——相关书籍

1.<黑客大曝光:网络安全机密与解决方案(第7版)> 简介:这是一本老外写的书,比较适合入门看,内容包括一些基本的攻防流程,基本工具软件,网络安全的一些基本概念等,对整个网络安全和黑客入侵都有比较全面的介绍.对Windows和Unix系统做了分别得介绍,新版(第7版)还对现今新兴技术无线网.移动设备等方面的安全知识做了介绍.虽然关于具体细节的介绍比较少,但通过这本书可以让初学小白们对黑客有一个全面完整的认识.推荐作为第一本读物阅读. PDF: 第六版:http://pan.baidu.com/

微信支付--入门篇

公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需要在商户网页进行选购下单的购买流程.  Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付.这种方式,适合无需选购直接支付的购买流程. 以上两种方式最大的区别是:是否需

微信小程序入门篇

微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教程 廖雪峰大神的博客 HTML+CSS 大概知道是干啥的就行 从零开始 微信小程序中就四种类型的文件 js ---------- JavaScrip文件 json -------- 项目配置文件,负责窗口颜色等等 wxml ------- 类似HTML文件 wxss ------- 类似CSS文件