linux简易Http服务器的实现

HTTP服务器:

笔者业余时间实现了两个版本的http服务器。代码见:https://github.com/didadi-zhongxiao/

功能模块:

1、对http请求的解析
2、对于解析好的请求进行处理
3、对套接字的监听
4、将处理好并编码完成的响应发送给客户端

版本一:

基于one connection one thread 模式,但由于linux下一个进程就4g空间,可用的(即用户态)也就3g,windows下只有2g,所以可创建的线程是有限的,linux大约两三百吧,所以采取线程池的方式去处理每一个连接。每一个线程各自accept,注意这里accept是要加锁的。
套接字是阻塞的,最大并发数大约在3800左右

版本二:

基于one request one thread 的模式。使用epoll监听套接字(为啥用epoll不用select可以看我之前的文章),如果有请求来就把发送套接字发给线程池,并且唤醒睡眠的线程,线程池进行read和write,因为实现的服务器也是短连接的,一次连接就一个请求,所以就没必要把输出操作再放在主线程中去了,还省了一次线程上下文切换。对了,套接字要设为非阻塞的哦,如果是非阻塞的就要在应用层加输入输出缓冲,什么,为啥,举个例子,你要发送30k的数据到内核上,内核的套接字的输入缓冲只有20k,而你的套接字又是非阻塞的,那剩下的咋办。(我也没加缓冲,只是粗糙的处理了下)
很惭愧,使用webbench测试出最大并发数才5000左右,而使用reactor模式应该能达到10万了吧,哎,所以我还会写版本三的,啥时候嘛,等我看完libevent的源码再说吧。

最后,希望大家多努力,总会提高技术的哦,共勉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值