先说一句哈,自从在B站开始刷视频后,我就觉得要学的内容实在是太多了。这篇“服务器软件大扫盲”就是我看了羊哥的一期视频后有感而发的,比如说Web服务器、HTTP服务器、应用服务器这三个概念,我是见过很多次,但如果你非要我说出它们之间的区别的话,我只好哑口无言。
还有,我自己用过的Tomcat、Nginx、Apache、Jetty、Undertow,它们之间有什么优缺点,嗯……继续哑口无言。可能有很多小伙伴和我一样,用过,但具体的差别还真的说不上来,所以我打算借这个机会来和大家一起学习下。
先来说Web服务器,它一般指的是网站服务器,可以向浏览器(PC端或者移动端)等Web客户端提供服务,供请求数据或者下载数据。服务器使用HTTP(超文本传输协议)和客户端浏览器进行通信,因此我们也把Web服务器称作为HTTP服务器。
再来说应用服务器,它是一种软件框架,提供一个应用程序运行的环境。通常用于为应用程序提供安全、数据、事务支持、负载平衡大型分布式系统管理等服务。
在我看来,Web服务器和应用服务器之间的界限已经非常模糊,后者更高级一点,就好像公司与企业这两个名词之间的差别。
常见的Web服务器软件包括Nginx、Apache、IIS,常见的应用服务器软件包括WebLogic、JBoss,前者更轻量级,后者更重量级。
就我的程序生涯来看,Tomcat用的算是最多了,没有之
一。如果Tomcat安装成功的话,可以在本地的浏览器中访问来展示它的默认首页,见下图。
Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,实现了对Servlet和JavaServerPage(JSP)的支持,并提供了作为Web服务器的一些特有功能。
JSP是由SunMicrosystems公司主导建立的一种动态网页技术标准。JSP可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
JSP以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。我是一名三线城市的Java程序员,免不了要开发一些小型网站,这也就是为什么我用Tomcat最多的原因。
Nginx是一款轻量级的Web服务器、也支持反向代理,由于它的内存占用少,启动极快,高并发能力强,所以在互联网项目中广泛应用。
Nginx在官方测试的结果中,能够支持五万个并行连接,国内比较有名的公司,比如说百度、京东、新浪、网易、腾讯、淘宝等都在使用。
不知道你有没有听过虚拟主机的概念,就是在Web服务里有一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源,可以独立地对外提供服务供用户访问。
Nginx可以使用一个server{}标签来标识一个虚拟主机,一个Web服务里可以有多个虚拟主机标签对,即可以同时支持多个虚拟主机站点。这一点,非常的实用。
最开始的时候,我以为Apache就是Tomcat,傻傻分不清楚。后来知道它们完全不同,logo就不同(说什么大实话)。
Apache一般是指ApacheHTTPServer,是Apache软件基金会(和Tomcat同属一家基金会,因此容易混淆)下的一个网页服务器软件。由于其跨平台和安全性,被广泛使用,是最流行的Web服务器软件之
一。它快速、可靠并且可通过简单的API扩展。
我是在服务器上安装WordPress的时候用到了Apache,当时并不知道有LAMP的存在,所以安装的过程中吃了很多苦,关键是最后没有安装成功,大写的尴尬。
最后还是在青铜群里的一个群友的远程帮助下才完成安装的,他是搞PHP的。LAMP就是他告诉我的,安装起来非常的傻瓜式,非常适合我这种对命令行有抗拒心理的程序员。
这些软件配合起来使用的时候,极具活力,它的变体还有很多,另外一个比较有名的就是LNMP,用Nginx代替Apache。
Jetty和Tomcat有很多相似之处,比如说可以为JSP和Servlet提供运行时环境。Jetty是Java语言编写的,它的API以一组JAR包的形式发布。
与Tomcat相比,Jetty可以同时处理大量链接并且长时间的保持这些链接,例如,一些Web聊天应用非常适合用Jetty服务器,比如说淘宝的Web版旺旺。
Jetty的架构比较简单,它有一个基本数据模型,这个数据模型就是Handler,所有可以被扩展的组件都可以作为一个Handler,添加到Server中,Jetty就是帮我们管理这些Handler的。
Undertow是一个用Java编写的、灵活的、高性能的Web服务器,提供基于NIO的阻塞和非阻塞API。
Undertow可以嵌入到应用程序中或独立运行,只需几行代码,非常容易上手。下面这段代码是官网提供的一个使用AsyncIO的简单HelloWorld服务器示例:
如果有小伙伴使用过JFinal开发过小型网站的话,对Undertow应该不会陌生,因为JFinal的默认容器已经切换到了Undertow。
JFinal是基于Java语言的极速WEB ORM框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。