我们都知道,学一门语言,只是单独看了就不写的话是很容易出现眼高手低的,所以,今天摩杜云要给大家分享的内容,就是如何用C语言写一个web服务器的基础功能,希望大家看完有所收获。
服务器架构
目标架构
以nginx的思想来考虑本服务器架构,初步考虑如下图:
当然php进程也可以替换为其他的脚本语言,可以更改源码中的command变量实现。
服务器有一个master进程,其有多个子进程为worker进程,master进程受理客户端的请求,然后分发给worker进程,worker进程处理http头信息后将参数传递给php进程处理后,将结果返回到上层,再响应给客户端。
也考虑过使用php-fpm的worker进程池方式,那样的话php-fpm进程也要仿写了,目前还不熟悉其内部构造,如果可以简单化,自然向其靠拢。目前对PHP的SAPI接口不熟,了解一下再考虑。
当前状态
当前状态的服务器还极其简单,总结下来有以下地方待优化:
当前还是单进程,需要改成多进程,最终为worker进程池方式;
优化socket IO模型,考虑epoll、事件驱动方式;
只支持HTTP GET请求方法,未进行太多的异常处理来定义http状态码;
与php进程的交互方式,考虑如nginx使用unix domain socket方式。
协议目前只考虑了ht