我们整个的项目采用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的请求进行分析