文档章节

一个网站的诞生07-- Tornado Web Server

brian_2017
 brian_2017
发布于 2017/01/17 09:42
字数 656
阅读 14
收藏 0
用Spider抓取数据,然后再做各种处理,然后放到web页面供大家使用。
那么,就需要一个Web Server。


几乎每种语言都有一大堆Web Server开发框架,Python也不例外,比如这里http://www.zhihu.com/question/20706333。廖雪峰同学还有个python的教程http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0014023080708565bc89d6ab886481fb25a16cdc3b773f0000。


选择合适的Web Server架构,可以减轻很多工作量。


应该用哪些指标选择Web Server呢?我的看法是,第一并发性好,速度要快,支持OnLine人数要高;第二,不需要配Nginx, Apache,我懒人;第三,项目是活的,有人维护;第四,框架的组件可用第三方替换;第五,有知名站点在用,经历过业界考验;第六,代码简洁。


通盘看下来,tornado跟这些指标契合度最高,速度够快,纯python,代码大概一万多行,单进程可以跑的很好,仅在开多进程时需要Nginx支持。Quora和知乎用的都是tornado。


tornado的官网在http://www.tornadoweb.cn/。


http://zuijiacanting.com的后端代码并不多,不到400行就搞定了。


一个最简单的tornado web server按照官方教程是这样的,创建一个s.py,其内容如下:


import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


application = tornado.web.Application([
    (r"/", MainHandler),
])


if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
在命令上执行"python s.py",然后在浏览器地址栏输入"localhost:8888",按回车,看到"Hello, world"。


在http://zuijiacanting.com的后端代码用get方法负责渲染页面,用post跟ajax交互,比如这种:


class ShopXXXHandler(tornado.web.RequestHandler):
    def get(self):
        template = os.path.join(TEMPLATE_DIR, "shxxxxx.html")
        self.render(template)


    def post(self):
        shopid = xhtml_escape(self.request.arguments['shopid'][0])
        lng = xhtml_escape(self.request.arguments['lng'][0])
        lat = xhtml_escape(self.request.arguments['lat'][0])
        sqlquery = "insert into ShopXXXXTable(shopid, lng, lat) values (\'%s\', \'%s\', \'%s\')" %(shopid, lng, lat)
        MPDB.execute_rowcount(sqlquery);
        self.write("ok")
        return
还有一些细节问题,诸如特殊字符在页面显示的escap模块,避免跨站攻击xsrf策略,用logging模块处理日志,用cookie保存用户登录和访问等等。


如果你对写web server很有兴趣的话,不妨试试读下tornado的源代码,然后动手写个类似的东西,再用ApacheBench测试下效果,看看是不是可以提高。


Tornado的开发者之一Brett Taylor,是google地图的首任产品经理,FrindFeed的co-founder,FrindFeed被FaceBook收购之后,做Facebook的平台主管,后来做了CTO。再后来他辞职去做一个创业项目,叫Quip,效果大概就是在任何设备上都能运行能多人合作编辑还可以边打字边讨论能脱机能@某人能共享的字处理软件。

© 著作权归作者所有

brian_2017
粉丝 3
博文 61
码字总数 145216
作品 0
私信 提问
raspberry pi搭建python web server

基于python的web server有很多,比如:django、web.py、tornado、fastcgi等。经过一番比较我选择使用tornado,使用tornado的原因有如下几个:1、tornado是轻量级的web server,2、异步I/O处理...

linuxhunter
2014/01/07
1K
0
Tornado 2.0 发布,Python编写的Web服务器

Tornado web server 是使用Python编写出來的一个极轻量级、高可伸缩性和非阻塞IO的Web服务器软件,著名的 Friendfeed 网站就是使用它搭建的。 Tornado 跟其他主流的Web服务器框架(主要是Pyt...

红薯
2011/06/23
5.1K
7
Tornado Web Server 1.2.1 发布

Tornado web server 是使用Python编写出來的一个极轻量级、高可伸缩性和非阻塞IO的Web服务器软件,著名的 Friendfeed 网站就是使用它搭建的。 要使用它,必须按照以下套件: 1)Python(建议...

红薯
2011/03/27
1K
0
Python Web框架Tornado运行和部署

运行和部署 因为Tornado内置了自己的HTTPServer,运行和部署它与其他Python web框架不太一样。你需要写一个函数来启动服务,而不是配置一个WSGI容器来运行你的应用: 配置你的操作系统或者进程...

lalamina
2016/04/14
4.1K
4
Tornado 4.0 发布,Web 服务器

Tornado 4.0 发布,此版本值得关注的特性如下: The tornado.web.stream_request_body decorator allows large files to be uploaded with limited memory usage. Coroutines are now faster......

oschina
2014/07/16
5.5K
18

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
4
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
8
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
901
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部