现在的Web服务器种类繁多,大家在做项目的时候可以根据自己的需求灵活选择。下面和大家分享一下有哪些Web服务器,以及它们的优缺点。
操作方法
01街头流氓
Apache又称httpd server,是目前应用最广泛的web服务器,应用于各种平台。当Apache首次推出时,它有许多缺陷。现在已经修复完善了。如果你是一名web服务器研究人员,边肖建议你必须学会使用Apache。
优点:紧凑、灵活、可扩展、稳定。
缺点:软件是开源的,所以很多漏洞可能很容易被发现。
02Nginx
Nginx是Linux平台下优秀的Web服务器。边肖以前使用过这种服务器,它大大提高了运行缓慢的应用程序的速度。
优点:压缩率高,负载均衡,速度快。
缺点:应用需要熟练的Linux命令。
03(同ImmigrationInspectors移民检查)
IIS是微软平台的Web服务器,是Windows平台的服务器。它和网文很匹配,初学者可以很快掌握。
优点:安装配置简单,简单易学。
缺点:平台适用性单一,安全性有待提高。
04中间件
WebLogic是专门用于企业开发的web服务器。一般搭配Java语言,使用上类似Apache。同时,它的架构也很优秀。
优点:安全性高,专业性强,耦合度低。
缺点:不容易掌握,需要一定的专业积累才能熟练应用。
05雄猫
Tomcat是许多Java学习者非常熟悉的web服务器。一般刚开始学习Java Web开发的人都会练习使用Tomcat作为服务器。它既有可视化的操作界面,又有命令语句,是一款不错的入门级服务器。
优点:简单易掌握,易于部署,应用广泛。
缺点:扩展性弱,可配置性弱,大并发能力弱。
06Lighttpd
Lighttpd是一个开源的web服务器,比较轻便,功能很多。目前使用率比较低,还没有普及。
优点:小巧精致,功能强大。
缺点:漏洞多,学习资源少。
07太阳
Sun是一个面向Solaris的web服务器,应用并不广泛,只应用于Sun公司相应的web产品。其他开发者也不能轻易使用这个服务器。
优点:针对性强,高并发,高速高效。
缺点:难掌握,适应性低。
08码头
Jetty是一个专用于Java Web的服务器。它用于运行Servlet程序,是众多服务器中最受限制的。边肖不建议你掌握这个服务器。
优点:内容简单,容易掌握。
1.IIS
IIS是英文Internet Information Server的缩写,译成中文就是"Internet信息服务"的意思。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS 7,IIS与Window Server完全集成在一起,因而用户能够利用Windows Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。
2.ApacheApache
ApacheApache在世界上的排名是第一的,它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,不仅简单、速度快、而且性能稳定,还可以用来做代理服务器。
3.Nginx
Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。
4.Zeus
Zeus是一个运行于Unix下的非常优秀的Web Server,据说性能超过Apache,是效率最高的Web Server之一。
5.Sun
Sun的Java系统Web服务器也就是以前的Sun ONE Web Server。主要出现在那些运行Sun的Solaris操作系统的关键任务级Web服务器上。它最新的版本号是6.1,可以支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至可以支持Windows,但它的大多数用户都选择了SPARC版本的Solaris操作系统。
Tomcat 或者 Jetty 就是一个“HTTP 服务器 + Servlet 容器”,我们也叫它们 Web 容器。
Spring 框架就是对 Servlet 的封装,Spring 应用本身就是一个 Servlet,而 Servlet 容器是管理和运行 Servlet 的。
Servlet 接口和 Servlet 容器这一整套规范叫作 Servlet 规范。Tomcat 和 Jetty 都按照 Servlet 规范的要求实现了 Servlet 容器。
Servlet 容器工作流程:
当客户请求某个资源时,HTTP 服务器会用一个 ServletRequest 对象把客户的请求信息封装起来,然后调用 Servlet 容器的 service 方法,Servlet 容器拿到请求后,根据请求的 URL 和 Servlet 的映射关系,找到相应的 Servlet,如果 Servlet 还没有被加载,就用反射机制创建这个 Servlet,并调用 Servlet 的 init 方法来完成初始化,接着调用 Servlet 的 service 方法来处理请求,把 ServletResponse 对象返回给 HTTP 服务器,HTTP 服务器会把响应发送给客户端。
Servlet 规范提供了两种扩展机制:Filter和Listener。
Tomcat 要实现 2 个核心功能:
因此 Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。
1,连接器
连接器需要完成 3 个高内聚的功能:
因此 Tomcat 的设计者设计了 3 个组件来实现这 3 个功能,分别是 EndPoint、Processor 和 Adapter。
Endpoint 和 Processor 放在一起抽象成了 ProtocolHandler 组件,连接器用 ProtocolHandler 来处理网络连接和应用层协议。
EndPoint 是一个接口,它的抽象实现类 AbstractEndpoint 里面定义了两个内部类:Acceptor 和 SocketProcessor。其中 Acceptor 用于监听 Socket 连接请求。SocketProcessor 用于处理接收到的 Socket 请求。
EndPoint 接收到 Socket 连接后,生成一个 SocketProcessor 任务提交到线程池去处理,SocketProcessor 的 Run 方法会调用 Processor 组件去解析应用层协议,Processor 通过解析生成 Request 对象后,会调用 Adapter 的 Service 方法。
2,容器
Tomcat 设计了 4 种容器,分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是平行关系,而是父子关系。
Context 表示一个 Web 应用程序;Wrapper 表示一个 Servlet,一个 Web 应用程序中可能会有多个 Servlet;Host 代表的是一个虚拟主机,或者说一个站点,可以给 Tomcat 配置多个虚拟主机地址,而一个虚拟主机下可以部署多个 Web 应用程序;Engine 表示引擎,用来管理多个虚拟站点,一个 Service 最多只能有一个 Engine。
请求定位 Servlet 的过程:Tomcat 会创建一个 Service 组件和一个 Engine 容器组件,在 Engine 容器下创建两个 Host 子容器,在每个 Host 容器下创建两个 Context 子容器。由于一个 Web 应用通常有多个 Servlet,Tomcat 还会在每个 Context 容器里创建多个 Wrapper 子容器。
每一个容器都有一个 Pipeline 对象。
3,一个请求在 Tomcat 中流转的过程 :
4,startup.sh 启动 tomcat 的过程:
粉丝福利,需获取Tomcat、spring等架构资料
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)