web服务器的概念与基本原理 web服务器的用途和工作原理是什么( 二 )

  • 资源输出模块 把处理好的内容和类型封装成HTTP报文,往TCP连接另一头的用户代理发送TCP报文(内容是HTTP报文) 。
  • 主流Web服务器
    还有比较多使用Tomcat,Jetty,WebSphere,WebLogic,Kerstrel等等 。
    1.2. Web应用程序容器概念与基本原理1.2.1. Web应用程序容器的由来Web服务器的出现的标志着WWW时代的带来,世界变得更加平面化 。当初尝到甜头的开创者们开始不满足与在互联网上获取静态资源,于是出现了CGI脚本来动态获取资源 。再后来网络发展方向也是朝着增强Web服务器动态获取资源的能力前进 。以下是代表性的动态技术:
    | 技术名词 | 特点 |
    | :------------- |:------------- | :------------- |
    | CGI(Common Gateway Interface,公用网关接口) | 以独立进程运行,可以用多种语言开发,比如C,C++,VB,Perl,灵活但效率低,维护复杂 |
    | PHP | 服务器端嵌入HTML脚本,开源,功能强大,扩展性较差 |
    | JSP| 服务器端嵌入HTML脚本,跨平台,部署前需编译,主要缺点是编写JSP比较复杂,需熟悉JAVA及相关技术 |
    | ASP | 服务器端嵌入HTML脚本,开发简单,功能强大,只能在windows下运行|
    随后Web服务器朝着企业级应用方向发展,快速的业务变化,迫使Web开发人员面对新的挑战:如何快速写出鲁棒,可靠,符合业务需求的程序并顺利部署?解决这个挑战的一个有效的办法是,创造一个Web程序开发框架(含运行环境,比如解释执行JSP,Web API),这个框架解决鲁棒性,可靠性问题,提供快速开发接口 。换言之,开发人员只需要专注于实现业务本身,如有更高的需求还可以对框架进行定制和扩展 。这个框架的另外一个名字是Web应用程序容器 。
    1.2.2. Web应用程序容器的基本工作原理相对于Web服务器,该容器新增或强化了以下模块:
    • 分配线程池资源 容器为每个请求分配一个线程进行处理,通常采取线程池的方式高效理由CPU算资源 。
    • 封装Request上下文 一个请求对应一个Request上下文,它主要封装了用户请求的主要构成:URL,HTTP请求头,以及基于请求头构建的Session,Cookie等对象,方便编程使用 。
    • 封装Response上下文 一个请求对应一个Response上下文,主要用于向用户代理返回资源 。可以在其中写入输出流,或者重定向,或者返回错误码等等 。
    • URL路由 在容器里,运行开发人员设置不同的路由匹配规则,比如让.HTM返回.HTML,也可以自定义.xyz返回.HTML资源 。更加灵活的配置可以参考JAVA MVC或者ASP.NET MVC的配置方案 。
    • 动态资源处理模块 通常在这里具体的容器和开发语言都有自己的高效开发模型,比如JAVA的Servlet,ASP.NET的Web Form,MVC 。
    • 回收资源 这里会回收刚才的线程资源,为了线程复用,除非服务器空闲一般会将线程返回线程池 。可以看出,Web容器本身具备了做为一个Web服务器的功能,事实上通常实现Web容器功能的服务器就是一个Web服务器.比如Tomcat , IIS ,Jetty 。
    主流Web容器
    包括Tomcat , IIS ,Jetty。
    还有比较多使用WebSphere,WebLogic等等 。
    1.3. Web应用程序服务器概念及基本原理在Web服务器发展的同一个时期,应用服务器已经存在并发展很长一段时间了 。一些公司为Unix开发了Tuxedo(面向事务的中间件)、TopEnd、Encina等产品,这些产品都是从类似IMS和CICS的主机应用管理和监控环境衍生而来的 。大部分的这些产品都指定了“封闭的”产品专用通信协议来互连胖客户机(“fat” client)和服务器 。在90年代,这些传统的应用服务器产品开始嵌入HTTP通信功能,刚开始要利用网关来实现 。不久后它们之间的界线开始变得模糊了 。
    同时,web服务器越来越成熟,可以处理更高的负载、更多的并发和拥有更好的特性;应用服务器开始添加越来越多的基于HTTP的通信功能 。所有的这些导致了web服务器与应用服务器的界线变得更窄了 。
    目前,“应用服务器”和“web服务器”之间的界线已经变得模糊不清了 。但是人们还把这两个术语区分开来,作为强调使用 。
    当有人说到“web服务器”时,你通常要把它认为是以HTTP为核心、web UI为向导的应用 。当有人说到“应用服务器”时,你可能想到“高负载、企业级特性、事务和队列、多通道通信(HTTP和更多的协议)” 。但现在提供这些需求的基本上都是同一个产品 。
    Web应用服务器包括了Web容器,同时内置了支撑企业应用的事务,安全,集成,通信,高可用等等功能,极大了减少了重复开发量,保障了业务系统快速开发和部署,而它本身也是一个Web服务器 。Web应用服务器可以选择使用大厂的WebLogic和WebSphere这种重量级产品外,也可以使用类似与Tomcat、jetty这样的web containner 再加上第三方的框架(spring,hibernate等)来构建自己的Application Server;.NET Core平台下可以选择IIS, Apache,Nginx 与ASP.NET Core构建 。