Webserver网页服务器项目
文章平均质量分 93
Linux轻量级网页服务器
陈岂几真幸运
冲冲冲
展开
-
Webserver 04 定时器处理非活跃连接
客户端与服务端简历建立连接后,长时间不进行数据交换,导致占用服务端的文件描述符,导致连接资源浪费。固定一段时间之后触发某段代码,这段代码完成一个事件(关闭连接文件描述符,释放连接资源)。利用结构体或其他形式,将多种定时器事件进行封装。将该定时事件与连接资源封装为一个结构体定时器。将多个定时器组合起来,便于对定时事件统一管理,这里使用的是升序双向链表。原创 2023-06-25 20:12:40 · 339 阅读 · 0 评论 -
Webserver 03 http连接处理
这个过程就是epoll_wait发现connfd上有数据可读了(epollin),主线程就将这个http请求报文读进这个连接socket的读缓存中users[sockfd].read(), 然后将该任务对象(指针)插入到线程池的请求队列中,线程池需要依靠锁机制以及信号量机制来实现线程同步 ,保证操作的原子性。而且我们在处理这个请求的同时,还需要继续监听其他客户的请求并分配其另一个逻辑单元来处理(这就要求要同时处理多个事件了,需要并发处理,这里我们使用的是线程池逻辑并发实现)原创 2023-06-25 13:22:33 · 200 阅读 · 0 评论 -
Webserver 02 半同步半反应堆线程池
线程处理函数和运行函数设置为私有函数,可以保证只有线程池类内部可以访问和修改,避免外部程序的干扰,提高了代码的可靠性和安全性。//线程池类定义public:/*connPool是数据库连接池指针thread_number是线程池中线程的数量,max_requests是请求队列中最多允许的、等待处理的请求的数量*/private:/*工作线程运行的函数,它不断从工作队列中取出任务并执行之*/void run();private://线程池中的线程数//请求队列中允许的最大请求数。原创 2023-05-22 01:24:46 · 272 阅读 · 0 评论 -
webserver 01 线程同步机制类
直到进程 A 访问完共享内存,才会执⾏ V 操作,使得信号量恢复为 0,接着就会唤醒阻塞中的线程 B,使得进程 B 可以访问共享内存,最后完成共享内存的访问后,执⾏ V 操作,使信号量恢复到初始 值 1。当信号量的值大于0时,sem_wait函数会将信号量的值减1,并返回0,表示信号量可用。进程 A 在访问共享内存前,先执⾏了 P 操作,由于信号量的初始值为 1,故在进程 A 执⾏ P 操作后 信号量变为 0,表示共享资源可⽤,于是进程 A 就可以访问共享内存。离开关键代码段,唤醒等待该互斥锁的线程.原创 2023-05-21 15:07:36 · 110 阅读 · 0 评论