HTTPweb服务器——HTTP整体设计框架

本文详细介绍了如何构建一个基于B/S模式的多线程HTTP服务器,涉及创建监听套接字、多线程accept、HTTP信息处理、CGI模式的GET和POST方法。通过设置SU_REUSEADDR实现端口复用,使用线程分离解决线程等待问题。CGI模式下,通过环境变量传递参数给子进程,实现高效的数据传输和资源处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们整个的项目采用B/S模式,通过浏览器发送HTTP的get方法和post方法,然后server进行响应,这样最终通过html看到我们所显示的最终的效果。
另外,为了支持并发,我们采用了多线程的结构。

1、进行创建监听套接字

和其他socket编程的模式是一样的,我们这里的第一步依然是首先创建监听套接字,创建的过程依然是,

socket–>bind—>listen。

这里在bind的时候采用sockaddr_in方式,另外为了实现端口的复用,我们采用了setsockopt的SU_REUSEADDR方式。

listen的时候,我们这里经常需要关注backlog,这个是已完成队列和未完成队列和的大小。

2、 进行accpet多线程的建立。

我们进行accept接收客户端的connect请求。这个过程的实质是对backlog队列的一个操作,在accept前,内核接受到connect请求首先把socket放入未完成队列,然后accept的时候,需要把socket放入已完成队列当中去,然后accept成功以后从已完成队列当中取出。这就是accept的整个过程。

accept成功以后,我们使用pthread_create来进行创建线程,把socket托付给线程来进行操作。在线程处理的过程中,有一个问题就是线程等待,我们为了解决这个问题,我们使用线程分离,这样使得线程可以作为孤儿进程的形式托管给1号进程,当执行完毕以后,由1号进程来进行资源的回收。

3、 线程处理

在整个线程处理函数内部,我们对HTTP的请求进行分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值