随笔分类 - SbWebServer
摘要:基于生产者消费者模型的线程池设计: 数据结构: 成员: 1.一个队列m_queue.其中存放Task,也就是任务,生产者线程,也就是主线程,往这个队列中push;消费者,也就是工作线程,不停地从其中拿走Task去工作。 关于Task,原型为boost::function<void()> Task;
阅读全文
摘要:EPOLLSHOT的作用主要用于多线程中 epoll在某次循环中唤醒一个事件,并用某个工作进程去处理该fd,此后如果不注册EPOLLSHOT,在该fd时间如果工作线程处理的不及时,主线程仍会唤醒这个时间,并另派线程池中另一个线程也来处理这个fd。 为了避免这种情况,需要在注册时间时加上EPOLLSH
阅读全文
摘要:对于一个网站页面来说,不同的页面被访问的可能性不同,像主页被访问的概率是最大的。 如果利用这个特点,对高访问概率的页面存入缓存,这样每次连接过来就不用每次都要经历本地找文件,打开这样一个过程。 对于这个缓存的设计,首先考虑: 1.主页一定是一直在缓存中的。 2.用一个哈希表来建立filename >
阅读全文
摘要:1.为什么引入非阻塞IO+IO多路复用: 以accept为例:accept等待连接时,陷入阻塞,而在阻塞期间相当于服务器是没有在工作的。 以read为例:当当前处理的socket中已无数据,但对端的数据尚未到达时,此时调用read,陷入阻塞,而在阻塞期间如果有其他客户端发起请求,是无法连接到服务器的
阅读全文
摘要:最简单版本的WebServer: 1.服务端初始化工作: a).创建主动套接字:initList(port) b).转为监听套接字:initList(port) c).等候和接受连接:Accept(listenfd,&clientaddr,&sizeof(clientaddr)); 2.处理客户端的
阅读全文