如何用C语言写一个web服务器的基础功能

本文分享如何用C语言编写一个简单的web服务器,包括服务器架构、功能实现和与PHP进程的交互。目前服务器为单进程,计划优化为多进程和事件驱动方式,支持HTTP GET请求。
摘要由CSDN通过智能技术生成

我们都知道,学一门语言,只是单独看了就不写的话是很容易出现眼高手低的,所以,今天摩杜云要给大家分享的内容,就是如何用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

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>