铜仁市论坛

首页 » 分类 » 定义 » C语言实现WEB服务器
TUhjnbcbe - 2021/3/21 11:24:00

小编今天介绍的项目是使用C语言实现一个简易的WEB服务器,并能支持动态解析PHP程序。

项目主要涉及到的技术有:LinuxSocket编程,HTTP协议(只实现GET请求),Fast-CGI协议。

通过本项目你会掌握Linux下的网络编程,如何用C语言实现一个应用层协议(Fast-CGI协议)

当然在学习这个项目之前,有两个重要的知识点是需要了解的,那就是WEB服务器以及Fast-CGI协议,接下来简单介绍一下:

WEB服务器的几种模型

高性能的WEB服务器能够同时支持数千条连接。这些连接使得服务器可以与世界各地的客户端进行通信,每个客户端都向服务器打开了一条或多条连接。因为请求可能会在任意时刻到达,所以WEB服务器会不停地观察有无新的WEB请求。不同的WEB服务器模型会以不同的方式为请求服务。

1.单线程WEB服务器

单线程的WEB服务器一次只处理一个请求,直到其完成为止。一个事务处理结束之后,才去处理下一条连接。这种结构易于实现,但在处理过程中,所有其他连接都会被忽略。这样会造成严重的性能问题,只适用于低负荷的服务器,本项目使用的是该模型。

2.多进程及多线程WEB服务器

多进程和多线程WEB服务器用多个进程,或更高效的线程同时对请求进行处理。可以根据需要创建,或者预先创建一些线程/进程。有些服务器会为每条连接分配一个线程/进程,但当服务器同时要处理成百、上千,甚至数以万计的连接时,需要的进程或线程数量可能会消耗太多的内存或系统资源。因此,很多多线程WEB服务器都会对线程/进程的最大数量进行限制。

.复用I/O的服务器

为了支持大量的连接,很多WEB服务器都采用了复用结构。在复用结构中,要同时监视所有连接上的活动。当连接的状态发生变化时(比如,有数据可用,或出现错误时),就对那条连接进行少量的处理;处理结束之后,将连接返回到开放连接列表中,等待下一次状态变化。只有在有事情可做时才会对连接进行处理;在空闲连接上等待的时候并不会绑定线程和进程。

4.复用的多线程WEB服务器

有些系统会将多线程和复用功能结合在一起,以利用计算机平台上的多个CPU。多个线程(通常是一个物理处理器)中的每一个都在观察打开的连接(或打开的连接中的一个子集),并对每条连接执行少量的任务。

Fast-CGI协议

CGI全称是“通用网关接口”(CommonGatewayInterface),它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据。CGI描述了客户端和这个程序之间传输数据的一种标准。

FastCGI是Web服务器和处理程序之间通信的一种协议,是CGI的一种改进方案,它为所有因特网应用提供高性能。

对于本项目来说,想要支持动态解析PHP程序,那么大概流程如下:

当WEB服务器接收到一个PHP文件请求时,WEB服务器会通过FastCGI将请求转发给FastCGI进程管理器(即PHP-FPM),FastCGI进程管理器接收到请求后,调用php解释器执行php文件,然后将执行结果返回给WEB服务器,之后WEB服务器再将FastCGI进程管理器返回的结果处理成HTTP响应报文格式发送给浏览器。

从上面描述可以看出,浏览器与WEB服务器之间的通信协议是HTTP协议,那么WEB服务器与FastCGI进程管理器之间通信协议是什么呢,答案就是FastCGI协议。

FastCGI协议大概流程如下图所示。

以上内容全部摘抄自实验楼课程

关于具体的实现代码以及详细的实现思路,可以访问实验楼网站,在线学习该课程。

在线环境:

实验楼提供如上图所示的在线环境:左边课程文档引导开发,代码详解;右边提供配套的在线实验操作环境随时动手学习;遇到问题还可以即时通过问答交流提问;理论+动手+交流,高效率的进行项目学习……

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: C语言实现WEB服务器