探讨一下web服务器的设计,有没有更好的设计方法

在学习 Linux编程方面,最近我写了一个 web服务器程序,使用 linux下的纯 c写的, web服务器能基本实现动态服务请求和静态服务请求。但是我总觉得我的设计不是很好,下面我说一说我的设计,你们看看有没有什么更好的设计。

web服务器的静态服务请求的实现使用的是线程池,由主线程统一获得连接请求,然后将已连接描述符压到一个缓冲区中,线程池中的空闲线程从缓冲区中获得描述符(这里使用互斥量维持线程间的同步),如果发现是静态的请求,就直接回应请求,如果是动态请求,就将描述符压到另一个缓冲区中。

这里有一个线程,和一个进程池共同来服务动态请求。这个线程使用i/o 复用和进程通信,发现进程有空闲的就将缓冲区中的动态请求的描述符发送给这个进程,因此这个线程主要作为进程的调度。

进程通过生成一个子进程,调用服务器目录中的cgi 程序来服务动态请求。

虽然程序已经编出来了,但是我总感觉程序太复杂,为了实现两个简简单单的功能( 动态服务和静态服务) ,居然要使用如此多的复杂的技术。之所以使用线程,是因为他在性能方面高于进程,之所以使用线程池,是因为这样能减少后期生成线程的性能影响。之所以又使用进程,是因为我还不知道如何使用线程来服务动态请求。

我问过几个老师,但可能他们的方向没有在这里,因此都没有提出多少可行的建议。我总感觉这个设计方法不是很好,一定会有很多需要改进的地方,比如在设计复杂度上需要改进,比如在描述符的共享上会有更好的设计,等等。我也不知道apache 的设计是怎样的,希望大家讨论给点指点,非常感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值