为什么 Nginx 已经这么成熟,Python 还有各种如 web.py 等 web 框架?
- WBOYOriginal
- 2016-06-06 16:23:021137browse
回复内容:
nginx是服务器,web.py是web应用框架。
简言之,前者封装对网络io的处理,后者负责具体应用的逻辑,解决的问题是不一样的。形象点呢,一个请求来了,nginx先把请求拦下来,发现要的是现成的东西(静态文件),它就直接把现成的静态文件返回给客户端,这样速度非常快,如果是其他的请求,再交给web.py解决,web.py解决完了之后,只是生成要返回的内容,并不自己做网络io,而是由nginx处理的。
这样多好,一个安心处理网络、并发,顺便把遇到简单的请求直接ko掉。另一个专心处理应用的逻辑。
当然nginx能做的不只是这些,而为了开发方便web.py等框架都是内置简单的web服务器的。
至于tornado,它里面既有web应用框架,也有web服务器,而且这个服务器用的还是高性能单线程非阻塞异步的模型,是个例外。
Nginx 是以静态内容和前端代理为主的服务器,Python 的各种框架用来实现动态的逻辑。
常见搭配是 Nginx 监听客户端连接,直接响应静态请求(图片、css、js 等),然后将动态请求通过 FastCGI (web.py) 或者 proxy (Tornado) 转发给后端的服务器进行处理。Nginx 本身是 C 写的,代码效率高,支持动态平衡,比直接用 Python 面对大规模请求要稳定高效一些。
Web.py 这些框架有时候会自带一个服务器用作开发,但是这个服务器(与 Python 标准库的 SimpleHTTPServer 一样)无法很好应对高负载情况,不应用于生产环境。
真正与 Nginx 形成竞争关系的是 Tornado 和基于 Twisted 的一些服务器。这些服务器本身就是为直接连接客户端设计的,并且支持 WebSocket 等一些 Nginx 反向代理不支持的协议。在一个足够复杂的、模块繁多的项目中,可能出现 Nginx 支持静态文件,Tornado 支持 comet 服务,然后某一端代理更多的业务逻辑的组合形式。
nginx更多想做代理和均衡負載,而不大可能執行過於強大的邏輯。它就像一個家長,只有權力但是不具體做事情,然後它做好家長的角色。
而衆多邏輯實現的框架比如web.py就是具體在後面跑的兒子,處理各種業務邏輯。
爲什麼nginx不也把兒子的事情做了呢?估計做不好,因爲很難用一個程序來解決所有的業務,那時候就變成另外一個語言解釋器了……龐大而複雜,不大可行。而兒子也不大可能做了家長的事情,因爲處理業務邏輯重要的是擴展性和表達力。
所以他們就分開了。。。。
一般使用 flask 或者 django这种应用框架都会使用uswgi这种服务器部署,但是uswgi本身并没有对直连客户端做优化,因此一般都会nginx+uswgi,使用nginx连接客户端向uswgi分发请求提高效率,这样对uswgi来说就不存在慢io问题,也可以做动静分离等等各种。关于Tornado之类高排名答案也说清楚了。
web 服务器? nginx 的作者要哭了!!!!!!人家是一个好性能的io的东西
把自带的开发用的服务器当成生产用的了?
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn