一、Web服务器

Web服务基于HTTP协议,HTTP协议基于TCP/IP协议。
HTTP请求底层必然是套接字,也就是TCP协议,HTTP服务器就是监听端口的一个守护进程。
它负责HTTP连接的建立、根据HTTP协议解析请求等底层处理。
常见的Web服务器有Nginx(俄国造),Apache(Apache造),lighttpd(德国造),IIS(微软造)。
Nginx跟Apache等普通服务器是不一样的,Nginx有反向代理功能,这决定了它可以以一个“大管家”的身份凌驾于其它Web服务器之上。
如果只有Web服务器,那么只能访问静态资源。要想生成动态内容,就需要程序。

二、CGI

CGI即通用网关接口(Common Gateway Interface),是Web服务器和用户程序之间进行交流的一种接口。它是语言无关的。
它的缺点如下:

  • 效率低下:每一个连接 fork 一个进程处理。
  • 功能有限:CGI只能收到一个请求,输出一个响应。不方便对请求进行过滤,比如验证一下用户有没有登录。

三、fastCGI

CGI的缺点是效率低,fastCGI维护一个线程池,效率大大提高,不用每个请求都开辟销毁线程。它也是语言无关的。

四、WSGI

Python Web Server Gateway Interface,类似于CGI,但是它是语言相关的,它只适用于Python。WSGI是Web服务器和Web应用之间进行交流的一种接口
WSGI之于Python相当于Servlet之于Java。
下面举个例子(来自廖雪峰Python教程)
首先,实现一个请求处理函数,写在hello.py中

# hello.pydef application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])return '<h1>Hello, web!</h1>'

以上代码中:

  • application是处理一切请求的地方,它需要两个参数
  • environ是一个字典,包含请求参数、路径等信息
  • start_response是一个函数指针,它需要返回请求状态码和HTML头部,用于生成HTML的header部分,在我看来,这部分也是可以直接return str产生的,可能是WSGI认为这部分与回复体应该分开。
  • return的内容即为HTML中的内容

要让支持WSGI的服务器来调用上面的函数,最简单的WSGI服务器莫过于wsgiref,这是Python内置WSGI服务器。

# server.py
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from hello import application# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print ("Serving HTTP on port 8000...")
# 开始监听HTTP请求:
httpd.serve_forever()

运行python server.py,打开浏览器访问localhost:8000即可看到结果。但是在python3中会抛出异常。

五、Servlet

Servlet机制是Java Web的标准,Java Web自成一家,没有采用CGI机制,毕竟CGI机制只有python,php,ruby这些脚本语言才用,Java不屑与之为伍。
狭义的Servlet指处理请求的Java类,广义的Servlet指Servlet运行的容器等与Servlet相关的一切东西。

Servlet统一了Java Web各个框架,像struts,spring MVC等框架底层都是Servlet。
同理,WSGI也统一了Python Web各个框架,像Django、Flask、web.py等框架底层都是WSGI,只要是实现了WSGI标准的Web服务器,Python Web框架都能在上面运行。

六、uWSGI

uWSGI是一个服务器,它实现了wsgi协议,从而它就相当于Python世界中的Tomcat,它可以运行一切Python Web程序(因为一切Python Web程序底层都按照wsgi协议来实现的)。
除了wsgi,uWSGI还定义了一种uwsgi协议用于跟其它服务器通信,比如通过uwsgi协议跟Nginx通信、跟Apache通信等。uwsgi只是一种数据传输协议,只有Nginx也支持uwsgi协议才能使得Nginx可以跟uWSGI对话。

七、Gunicorn

corn 玉米
unicorn 独角兽
Gunicorn是uWSGI的竞争者,它也是实现了WSGI协议、可以作为Python Web服务器的一种服务器,也相当于Python世界中的Tomcat。
相比uWSGI,Gunicorn更好用,部署更简单。

八、wsgiref

Python语言内置的wsgi服务器,可以用于测试

九、mod_wsgi

mod_wsgi是Apache的一个模块,跟mod_php一样。
Apache服务器本来不支持php,添加mod_php模块之后就支持php了。mod_wsgi也是一样,添加之后Apache就支持Python了。
现在已经很少使用mod_wsgi了,更多使用Gunicorn作为Python服务器。

十、为啥要用Nginx

Tomcat、uWSGI都是服务器,Nginx也是服务器,那么为啥用了前两者,还要用Nginx?
Tomcat、uWSGI处理动态,Nginx处理静态,像一些静态资源Tomcat也可以处理,但是肯定不如Nginx处理得快,所以Nginx就充当了一个大管家,这个大管家不仅善于处理静态内容,并且可以用于分发请求从而实现负载均衡。
Nginx的作用:

  1. 负载均衡,Nginx占用80端口,其它服务器可以占用多个非80端口;
  2. 拦截静态请求;
  3. 伪静态化并缓存,减少动态请求数量;
  4. 依赖于nginx强大的功能和性能,可以做访问控制,限速,限连接数等等;
  5. nginx缓存客户端发起的请求,直到收完整个请求,转发给Gunicorn,等Gunicorn处理完成后,拿到响应,再发给客户端,这个流程是nginx擅长处理,而Gunicorn不擅长处理的。

Nginx的作用是反向代理。正向代理指客户端通过代理服务器访问我的服务器,反向代理是客户端通过我的服务器上的代理服务器访问我的服务器上的服务器。

十一、Tornado(龙卷风)

Tornado是一个功能丰富、强大不可方物的库。

  1. 高性能的网络库,这可以和gevent,twisted,libevent等做对。提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclient在现有http客户端中肯定排第一。可以用来做爬虫,游戏服务器,据我所知业界已有使用tornado作为游戏服务器
  2. web框架,这可以和django,flask对。提供了路由,模板等web框架必备组件。与其他区别是tornado是异步的,天然适合长轮训,这也是friendfeed发明tornado的原因,
    当前flask也可以支持,但必须借住gevent等
  3. 较为完备的http服务器,这点可以和nginx,apache对比,但只支持http1.0,所以使用nginx做前段不仅是为了更好利用多核,也是让其支持http1.1
  4. 完备的wsgi服务器,这可以和gunicore,gevent wsgi server做对比,也就是说可以让flask运行在tornado之上,让tornado加速flask
  5. 提供了完备的websocket支持,这让html5的游戏等提供了便利。像知乎长轮训就是使用了websocket,但websocket手机支持的不是很好,前段时间不得不使用定时ajax发送大量请求,期待手机浏览器赶快奋起直追

参考资料

知乎关于Tornado的讨论
博客园关于Python部署

转载于:https://www.cnblogs.com/weiyinfu/p/6413970.html

web服务器一些概念相关推荐

  1. web与web服务器的概念理解

    前言 备注:该技术博客的内容是我根据技术视频整理与总结的(并非复制粘贴).原视频源于[遇见狂神说]JavaWeb课程 一.基本概念 首先我们应该学习一下基本概念,我们聊一下web开发.在web开发中w ...

  2. IIS Web 服务器/ASP.NET 运行原理基本知识概念整理

    前言: 记录 IIS 相关的笔记还是从公司笔试考核题开始的,问 Application Pool 与 AppDomain 的区别? 促使我对进程池进了知识的学习,所以记录一下学习的笔记. 我们知道现在 ...

  3. 一、服务端开发基础(搭建Web服务器、网络基础概念、请求响应流程、配置Apache、静态网站与动态网站)

    一.建立你的第一个网站(目标) 前端开发 最终还是属于 Web 开发 中的一个分支,想要成为一名合格的前端开发人员,就必须要 充分理解Web 的概念. 构建一个专业的网站是一项巨大的工作!对于新手我们 ...

  4. Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常

    Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...

  5. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

     1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...

  6. 理清web服务器跟应用服务器的基本概念(纯拷贝)

    一 常见的WEB服务器和应用服务器 在UNIX和LINUX平台下使用最广泛的免费web服务器是W3C.NCSA和APACHE服务器,而Windows平台NT/2000/2003使用IIS的WEB服务器 ...

  7. Web服务器与Web容器的概念

    Web服务器的功能:处理HTTP协议栈.文件系统映射及I/O.多线程处理请求/响应.日志记录.代理服务. 只使用Web服务器,我们只能实现Web1.0的部分功能--静态网页,因为Web服务器应用只能提 ...

  8. 20步打造最安全的Nginx Web服务器

    Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows ...

  9. web个人主页制作代码_关于嵌入式web服务器

    1.boa的配置文件boa.conf Port 80 //服务访问端口 User 0 Group 0 ErrorLog /var/log/boa/error_log //错误日志地址 AccessLo ...

最新文章

  1. linux上给其他在线用户发送信息(wall, write, talk, mesg)
  2. [zz]GNU C __attribute__ 机制简介
  3. php ftp是什麽,FTP是什么
  4. android 三星 拍照,安卓里面拍照最好的三个品牌,OPPO华为三星怎么选
  5. 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式
  6. 【更新】Essential Studio for ASP.NET MVC更新至2018 v4(三)
  7. 在大米云主机中采用CentOS 6.5 部署Redmine 3.3
  8. 数据库之战 | 寻找你心中的数据库漫威英雄
  9. 什么是L2行情接口?
  10. 在那个春暖花开的季节 今天微微的小雨 伴着轻轻的晚风我们一起来编写 员工考勤信息管理...
  11. PJzhang:今天才搞清身份证、银行卡……的编码规则
  12. 十一黄金周旅游线路排行榜(图文)
  13. guava LoadingCache 的用法
  14. 小程序+spring boot校园交友平台毕业设计-附源码191733
  15. 云原生下的开发测试实践
  16. 同态滤波 matlab,基于Matlab的同态滤波器的优化设计
  17. xshell常用命令和快捷键----(备忘、随时更新)
  18. linux切割日志方法,Linux下nginx生成日志自动切割的实现方法
  19. fastapi——快速入门
  20. 经典趣味数学问题之过河问题

热门文章

  1. 如何找回Oracle所有用户丢失的密码
  2. JMeter二次开发(1)-eclipse环境配置及源码编译
  3. 【南邮操作系统实验】页面置换算法 (FIFO、LRU、OPT)Java 版
  4. 【渗透测试实战】PHP语言有哪些后门?以及利用方法
  5. Linux下服务器搭建(5)——CentOS下Redis的安装
  6. python进阶16多继承与Mixin
  7. 数据可视化黑科技!它比python强大20倍
  8. thinkphp5常用函数汇总_thinkphp 5 常用的助手函数
  9. 东风科技php,东风科技(600081)违规记录_新浪财经_新浪网
  10. python自带模块可以控制鼠标吗_python自带模块模拟鼠标和键盘操作