使用bottle.py体验WSGI服务




一直对WSGI比较感兴趣,这东西是所有RestFul HTTP API请求的入口,但是又没咋搞明白,之前看过一点paste deploy的东西,也玩过几把:https://github.com/aspirer/study/tree/master/paste_deploy,但WSGI服务的编写和托管部署都不甚明白,因此动手决定体验一把。之前听同事说过bottle.py这个框架(其他框架也很多:python自带的wsgiref、web.py、flask、django等等),一个文件就搞定所有WSGI基础功能,非常简单轻巧,部署超简单,下载一个文件就能跑,还能集成到很多web框架中,新手用它来体验WSGI服务再合适不过了。官网:https://bottlepy.org/

首先根据官网介绍实现一个WSGI app,全部文件清单如下:

其中文件内容分别为:

注意,使用Apache、uWSGI托管服务的时候,不需要这行:run(host=’0.0.0.0′, port=9090) 

直接运行

之后执行python hello.py就可以跑起来一个简单的WSGI服务了,端口是9090,监听到0.0.0.0,浏览器访问:http://WSGI服务节点IP:9090/hello,就会显示”Hello World!”,访问http://WSGI服务节点IP:9090/hello/abc,就会显示Hello abc!

Apache托管

我是Centos7系统,安装Apache及python wsgi mod:yum install httpd mod_wsgi,其他系统类似,自己网上找包名安装即可。

添加配置文件:

记得删除hello.py中最后一行run(***)。

重启Apache服务即可浏览器访问(查看服务状态可以看到1699 (wsgi:helloapp) -DFOREGROUND这个helloapp的wsgi服务已经运行)。访问方法跟上面一样,注意端口号改为8080。

uWSGI托管

参考文档:https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html

安装uwsgi:curl http://uwsgi.it/install | bash -s default /var/www/wsgi/uwsgi

运行uwsgi(注意使用绝对路径,否则app.wsgi中的dirname会报错):/var/www/wsgi/uwsgi –http :9900 –wsgi-file /var/www/wsgi/app.wsgi –master

uwsgi命令有很多参数可用,参考官方文档即可,另外uwsgi还支持各种web服务容器如Apache、Nginx等,请参考官方文档:https://uwsgi-docs.readthedocs.io/en/latest/WebServers.html

访问方法跟上面一样,注意端口号改为9900。

Web Server的原理及高性能异步方案

这个问题也困扰了我很久,一直都想知道一个高性能、高并发的web server是怎么实现的,比如Apache httpd、Nginx,怎么做到并发连接数成千上万?

看完如下这几篇文章有点大概了解了: