服务器 应用框架。

人码图技术分享1022

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 服务,然后某一端代理更多的业务逻辑的组合形式。


================

一般使用 flask 或者 django这种应用框架都会使用uswgi这种服务器部署,但是uswgi本身并没有对直连客户端做优化,因此一般都会nginx+uswgi,使用nginx连接客户端向uswgi分发请求提高效率,这样对uswgi来说就不存在慢io问题,也可以做动静分离等等各种。关于Tornado之类高排名答案也说清楚了。

==========
webstack的前世今生就是一个重复造轮的过程,它的目标是将本地程序栈弄成分布式b/s web,其实这在语言端可以做(比如语言模块的http unit,然后是一层层我们从桌面时代开发最基本的socketapp开始,http封装之后也许是一个aysn网络io库,最终到达语言库级的webframework直到专门的独立程序支持,也许这个时候人们发现那个网络io库可以独立出来作为一个server,再比如第三方容器在这种需求下很容易出现,流控安全等需要也会泛滥),于是终于发展到用独立的服务器OS组件来实现这些强化,形成专门的产品来做,体现在开发上首先是webserver+CGI处理。web作为b/s在架构上假设有服务端程序存在,而cgi就是开发web程序的语言同webserver交互的扩展,动态语言将运行结果转成web page app的手段。像mod_swgi,mod_php就直接将phpcgi做到了语言。如webstack.语言则屈居之下。—— 这完全是语言,独立件,一方做大了包裹另一方的关系但二者始终是一体的。

=============


相关文章

开源--Ventoy

开源--Ventoy

简单来说,Ventoy是一个制作可启动U盘的开源工具。有了Ventoy你就无需反复地格式化U盘,你只需要把 ISO/WIM/IMG/VHD(x)/EFI 等类型的文件直接拷贝到U盘里面就可以启动了,无...

win版 postgresql配置简单说明

win版 postgresql配置简单说明

win版 postgresql配置简单说明官网下载最新win版本压缩包,本例中使用的是postgresql-11.5-1-windows-x64-binaries.zip解压缩到指定目录,比如D:\p...

Linux查看所有用户命令/查看系统命令

Linux查看所有用户命令/查看系统命令

1、用户查看命令序号命令作用01id 用户名查看用户 UID 和 GID 信息02cat -n /etc/passwd查看用户详细信息,参数 - n 显示行号03cat -n /etc/group查看...

开源--open-falcon

开源--open-falcon

一、open-falcon简介  open-falcon是由小米运维团队,从互联网公司角度为出发点,开发出来的一套面向互联网行业的企业级的开源监控系统,截至2019年7月,open-falcon最新稳...

Docker常用命令详解

Docker常用命令详解

docker daemon命令-docker运行可指定项详解docker attach命令-登录一个已经在执行的容器docker build 命令-建立一个新的imagedocker commit命令...

Linux系统上Nginx+Python的web.py与Django框架环境

Linux系统上Nginx+Python的web.py与Django框架环境

1.编译nginx在网上买了一本《实战nginx-取代Apache的高性能服务器》,写的比较浅,主要是些配置方面的东西,不过却正是目前我所需要的。由于需要支持https和rewrite,所以除了ngi...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。