一个网站的诞生07-- Tornado Web Server
2014-08-15 15:05
183 查看
用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,效果大概就是在任何设备上都能运行能多人合作编辑还可以边打字边讨论能脱机能@某人能共享的字处理软件。
那么,就需要一个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,效果大概就是在任何设备上都能运行能多人合作编辑还可以边打字边讨论能脱机能@某人能共享的字处理软件。
相关文章推荐
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(4)
- VS中一个解决方案有多个Web网站.如何不启动全部asp.net development server(WEB服务器)
- SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(2)
- 一步步学习SPD2010--第十三章节--管理SP Server环境的Web内容(1)--创建一个发布网站
- SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(3)
- SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(5)
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(1)
- 一步步学习SPD2010--第十三章节--管理SP Server环境的Web内容(1)--创建一个发布网站
- Python:FriendFeed的Tornado Web Server
- 一个学习html(dom),js,css,xml等所有web技术的好网站
- vs 2008 多个网站项目的时候只启动一个web项目,不debug的不启动
- 一个支持CGI的极简WebServer
- 用ISA server 的 web chain 解决 部位网站因为ISP的原因无法浏览。
- 推荐一个提供Web Service的网站 http://www.webxml.com.cn
- 为Web开发者和设计者推荐一个网站 six Revisions
- 一个可靠的天气预报Web Server
- 在本机环境中搭建一个真正的web网站环境(和网站部署到服务器上效果一致)
- 一个学习Web基础知识比较好的网站