保定网站维护公司,江门网站建设易搜互联,人工智能公司排名,html指令代码大全创建并初始化线程池–》threadpool.h, 创建并初始化脱离(执行完后)子线程#xff0c;每个子线程信号量wait阻塞【1】 创建套接字#xff1a;int listenfd socket( PF_INET, SOCK_STREAM, 0 ); 端口复用#xff1a;setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, 脱离(执行完后)子线程每个子线程信号量wait阻塞【1】 创建套接字int listenfd socket( PF_INET, SOCK_STREAM, 0 ); 端口复用setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, reuse, sizeof( reuse ) ); 绑定ret bind( listenfd, ( struct sockaddr* )address, sizeof( address ) ); 监听ret listen( listenfd, 5 ); 多路复用addfd( epollfd, listenfd, false ); while无限循环使用 epoll_wait 函数等待事件发生 - 新客户端连接进来accept连接初始化连接信息把描述符添加到epoll队列中。 - 有可读事件主线程读取所有数据把连接数据加到线程池任务添加到请求队列唤醒等待中的线程m_queuestat.post(); --子线程被唤醒执行取出任务队列中的第一个任务执行也就是解析请求的过程当得到一个正确的HTTP请求时我们分析目标文件的属性如果目标文件存在、对所有用户可读且不是目录则使用mmap将其映射到内存地址m_file_address处并告诉调用者获取文件成功。根据解析的HTTP请求内容生成响应修改epoll队列事件类型告诉 epoll 服务器已准备好向客户端发送数据。 - 有可写事件写完所有数据。