前言
概念理解
需要的材料
nginx
flup/WSGI
flask
什么是nginx?
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器。这是我刚刚百度的结果。结果我还是不知道nginx是什么 。 这么说吧,淘宝很帅,
是吧! 双11那天,全国人民一起刷淘宝,但它还是坚持住了 。 这是为什么呢 ? 这说明它的服务肯定不是放在一个服务器上的。 简单的来说它一定
不是用一个tomcat! 它一定是用了一个类似nginx的服务器转发请求的。如图
什么是flup/WSGI?
servlet中,我们每个一个servlet都要按照一定的格式来写 一个servlet必须有init ,post , get ,destroy 方法 。 每一个继承servlet接口的java类都可以放在
tomcat中都可以运行。那一个什么样的代码可以在python服务器里面运行呢 ? 答案是满足WSGI协议的代码可以在如web环境中运行 。 今天要用的python服务器时flup。
WSGI简介
- from wsgiref.simple_server import make_server
-
- def hello_world_app(environ, start_response):
- status = '200 OK' # HTTP Status
- headers = [('Content-type', 'text/plain')] # HTTP Headers
- start_response(status, headers)
-
- # The returned object is going to be printed
- return ["Hello World"]
-
- httpd = make_server('', 8000, hello_world_app)
- print "Serving on port 8000..."
-
- # Serve until process is killed
- httpd.serve_forever()
这段代码解释了
WSGI协议中python满足什么样的代码可以 在服务器中运行 。
可以在服务器中运行的是一个方法 。 方法第一个参数其实就是一个字典对象,里面是所有从用户请求和服务器环境变量中获取的信息内容,协议当然会定义一些必须有的值,及这些值对应的变量名;第二个参数其实就是一个回调函数,它向应用端传递一个用来生成响应内容体的write对象,这个对象也是有__call__方法的。
协议也提到了,还可以设计中间件来连接服务器端与应用端,来实现一些通用的功能,比如session、routing等。
什么是flask?
j2ee中有一个框架叫struts 。 flask就是python中的struts!
实践 :
首先下载nginx
1)下载地址:
2)启动
解压至c:\nginx,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹C:\nginx\logs
3)使用
配置nginx,找到nginx.conf
添加一段如下代码
server
{
listen 8000;
server_name test.com;
location /
{
#fastcgi_pass unix:/tmp/python-cgi.sock;(注1)
fastcgi_pass 127.0.0.1:8008; (注意这里的端口和上面的listen的8000端口要不一样,否则会报地址已占用的错)
fastcgi_param SCRIPT_FILENAME "";
fastcgi_param PATH_INFO $fastcgi_script_name;
include fcgi.conf;
}
}
下载flup
到命令行输入 pip.exe install flup . 就可以安装flup了 。
然后我们再写一个fcgi.py,代码如下
#!/usr/bin/python
# encoding : utf-8
from flup.server.fcgi import WSGIServer
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World!\n']
if __name__ == '__main__':
WSGIServer(myapp,bindAddress=('127.0.0.1',8008)).run()(注2)
from flup.server.fcgi import WSGIServer
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World!\n']
if __name__ == '__main__':
WSGIServer(myapp,bindAddress=('127.0.0.1',8008)).run()(注2)
运行到这了,我们就可以在浏览器里面敲: http://localhost:8000
如果返回 Hello World,恭喜你,迈出了nginx 运行python的第一步
参考的文章有
http://www.cnblogs.com/chuncn/archive/2011/10/14/2212291.html
windows下nginx安装、配置与使用
http://blog.163.com/sky20081816@126/blog/static/16476102320108254032278/ 捉摸Python的WSGI(转)
http://blog.163.com/sky20081816@126/blog/static/16476102320108254032278/ 捉摸Python的WSGI(转)