设为首页 收藏本站
查看: 741|回复: 0

[经验分享] 转: Python WSGI fastcgi

[复制链接]

尚未签到

发表于 2015-4-23 05:32:48 | 显示全部楼层 |阅读模式
  一、什么是 WSGI 。
  在认识 flup 之前,得先认识一下 WSGI 。
  WSGI 的全称为: Python Web Server Gateway Interface v1.0 (Python Web 服务器网关接口),它是 Python 应用程序和 WEB 服务器之间的一种借口,更多详细的细节,可以参考 PEP333 。
  它的作用,类似于FCGI 或 FASTCGI 之类的协议的作用。
  WSGI 的目标,是要建立一个简单的普遍适用的服务器与 WEB 框架之间的接口。
  WSGI 的特点是:简单、可移植等。
  二、什么是 flup 。
  WSGI 还只是一种规范,一种标准,它要完成的作用是用来定义 Python 应用程序要如何于 apache/lighttpd/nginx 等之类的 WEB 服务器之间如何进行通信和交换信息,它不是实际可以直接拿来用的东西。而 flup 就是使用 Python 语言对 WSGI 的一种实现,是可以用于 Python 的应用开发中的一种工具或者说是一种库。
  flup 的官方网站为: http://trac.saddi.com/flup 。flup 属于开源软件,采用了 BSD 风格的开放源码授权。
  那么, WSGI 除了 flup 外,还有没有其他的实现呢,当然有,更多的实现,可以参考:
  http://wiki.python.org/moin/WSGIImplementations
  三、flup 支持的 WSGI 服务器/网关
  flup 支持三种 WSGI 服务器/网关,分别为 AJP 1.3 , FastCGI ,和 SCGI 。
  而对于 flup 支持的这三种 WSGI 服务器/网关, flup 有分别提供了两种不同风格的版本:线程版本和进程版本。
  这样, flup 实际就支持六种类型的 WSGI 服务器/网关,分别为:
  flup.server.ajp   
flup.server.ajpfork      
flup.server.fcgi      
flup.server.fcgi
fork     
flup.server.scgi     
flup.server.scgi_fork     
flup.server.cgi
  使用的参考示例如下:
def myapp(environ, start_response):
start_response(’200 OK’, [('Content-Type', 'text/plain')])
return ['Hello World!\n']
if __name__ == ‘__main__’:
from flup.server.fcgi import WSGIServer
WSGIServer(myapp).run()

  四、flup 在 Django 中的应用
  作为一款非常著名和使用比较广泛的 Python Web 开发框架,Django 中就应用到了 flup 。在 django/core/servers/fastcgi.py 文件中,就调用了 django/core/handlers/wsgi.py 中的 WSGIHandler() 负责对 WSGI 的应用进行处理。
  五、WEB 处理流程
  nginx  flup(wsgi/django)
  lighttpd  flup(wsgi/django)
  apache flup(wsgi/django)
  小注:
  Apache/lighttpd:
  相当于一个request proxy,根据配置,把不同的请求转发给不同的server处理,例如静态的文件请求自己处理,这个时候它就像一个web server,对于fastcgi/python这样的请求转发给flup这样的Server/Gateway进行处理
  flup:
  一个用python写的web server,也就是cgi中所谓的Server/Gateway,它负责接受apache/lighttpd转发的请求,并调用你写的程序 (application),并将application处理的结果返回到apache/lighttpd
  fastcgi:
  apache/lighttpd的一个模块,虽然flup可以作为一个独立的web server使用,但是对于浏览器请求处理一般都交给 apache/lighttpd处理,然后由apache/lighttpd转发给flup处理,这样就需要一个东西来把apache/lighttpd 跟flup联系起来,这个东西就是fastcgi,它通过环境变量以及socket将客户端请求的信息传送给flup并接收flup返回的结果
  web.py:
  应该说有了上面的东西你就可以开始编写你的web程序了,但是问题是你就要自己处理浏览器的输入输出,还有cookie、session、模板等各种各样的问题了,web.py的作用就是帮你把这些工作都做好了,它就是所谓的web framework,另外一个出名的是django,不过感觉太复杂了,web.py差不多就够用了
  WSGI :
  除了flup Server/Gateway外还有很多其他人的写的Server/Gateway, 这个时候就会出问题了,如果你在flup上写了一个程序,现在由于各种原因你要使用xdly了,这个时候你的程序也许就要做很多痛苦的修改才能使用 xdly server了,WSGI就是一个规范,他规范了flup这个服务应该怎么写,应该使用什么方式什么参数调用你写的程序(application)等,当然同时也规范你的程序应该怎么写了,这样的话,只要flup跟xdly都遵守WSGI的话,你的程序在两个上面都可以使用了,flup就是一个WSGI server

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59676-1-1.html 上篇帖子: Python边学边用--BT客户端实现之(一)BitTorrent文件解析 下篇帖子: python中的闭包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表