服务器 应用框架。

人码图技术分享1018

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.语言则屈居之下。—— 这完全是语言,独立件,一方做大了包裹另一方的关系但二者始终是一体的。

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


相关文章

win版 postgresql配置简单说明

win版 postgresql配置简单说明

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

Python 虚拟环境venv详解

Python 虚拟环境venv详解

Python 虚拟环境主要是为不同 Python 项目创建一个隔离的环境,每个项目都可以拥有独立的依赖包环境,而项目间的依赖包互不影响,对Python 虚拟环境venv相关知识感兴趣的朋友一起看看吧+...

开源--open-falcon

开源--open-falcon

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

网络安全扫描工具

网络安全扫描工具

网络安全扫描工具是用于检测计算机系统、网络和应用程序中存在的安全漏洞和弱点的软件工具。在一般环境中,我们主要针对sql和html进行安全扫描,帮助开发人员优化提升系统环境的安全。以下是15个常用的网络...

python打包环境的方法

python打包环境的方法

方法一:pip freeze >requirements.txt   导出当前环境pip download -d ./packs -r requirements.txt&nb...

Python | Conda pack 进行环境打包

Python | Conda pack 进行环境打包

conda 常用来执行虚拟环境配置和包管理工作,有时候需要将本地的环境一直到新的离线的机器上,可以使用conda-pack 进行conda 环境打包和分发。安装conda 安装conda&n...

发表评论    

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