web服务器端基本软件结构
操作系统
既然服务器是一台机器,那么就会有操作系统。常见的服务器上安装的操作系统为Linux,Linux会有好多不同的版本,如ubuntu,centos,redhat。
web应用程序
操作系统有了,那么就说到了应用程序,所谓的应用程序,就是开发环境IDE,IDE主要的作用就是一个编译环境。
也就是说,是纯软件层面的操作系统的API,为客户的上层应用程序提供最底层的操作系统的API。就像windowsAPI那样的。
Windows下的应用程序 (vc++6.0)就是一个IDE,大家可以用它来编写C语言,它给C语言提供了一个编译环境。
同样的,后台语言诸如:php,java,.net,js,那么这些个语言就需要个后台的“VC++6.0”,这个VC++6.0”IDE就是我们平日里听过的apache,tomcat,nodeJs
通过这些IDE,才能把php等后台代码翻译成二进制的机器语言,交给操作系统去执行。
按道理来说,最终所有的代码还是要靠操作系统去执行的,如Linux,windows等,那为什么不直接在操作系统级别直接开发?
理论上是可以的。
但原因还是那个:解耦。
操作系统级别开发太细节了,在这个层面上开发就免不了面向过程,细节和业务逻辑代码混杂在一起。比如apache,tomcat,nodeJs对于网络功能的封装就属于业务逻辑,所以在细节和业务逻辑代码分离的前提下,操作系统上面就添加了apache,tomcat,nodeJs等应用层,这就是服务器应用程序。
Web服务器工作原理详解
最基础的Web服务器工作原理:
以上为Web服务器工作基本原理。其实不难发现,这仅仅只是一个简单的网络通信。我们应该深信,作为一个服务器,其根本的工作无非有三个:
1.接收数据 2. 发送数据 3. 数据处理
而Web服务器的本质就是 接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据
高级的服务器无非就是将这三个部分更加细致的设计了。
下面在上图原理的基础上,再进一步细分高级服务器
静态Web服务器工作原理
可以看出,其他流程基本不变,着重在于红色与蓝色部分。
动态Web服务器工作原理
即使单方面的静态资源请求是网络的主力军,但仅仅只是网页的浏览并不能满足所有人的需求,客户端与服务器应当是有数据交互的。
数据提交使得用户的操作性有了质的飞跃,它使得HTTP短连接获取静态文件的方式提升到了动态交互的层次上。该性质也催化出各式各样的编程语言、框架。例如PHP,JavaWeb。
以最古老、简单的动态技术CGI为例
可以看出,其他流程基本依然不变,着重在于红色与蓝色部分。
如果你留意目前主流的那些大型服务器,你会发现再高级再牛逼的东西实际是也是这些最基础的东西建造的。