
C++ Web服务器
文章平均质量分 56
C++ Web服务器
MatsumotoChrikk
这个作者很懒,什么都没留下…
展开
-
定时器Timer-日志系统
因为http_conn对象是MAX_FD个(有限)所以如果长时间占用,就会浪费。则使用定时器定时关闭fd。信号处理函数利用管道通知主循环-----每当监测到有这个信号的时候,都会将这个信号写到pipefd[1]里面,传递给主循环。主循环收到信号对升序链表的所有定时器处理-----如果时间内没有交换数据,就关闭连接。原创 2024-09-02 09:39:40 · 393 阅读 · 0 评论 -
MySQL-CGI-响应报文
账号密码涉及到:与数据库已记录下来的进行校验。如果也是来一个新建一个连接,必然效率低。可以做一个数据库连接池,预生成数据库连接。如何生成数据库连接?下面的流程做很多次。然后放在链表中,(池))维护三个变量 最大连接数 可用连接数 当前已用连接数 (要上锁)1.使用mysql_init()初始化2.使用real_connect()建立连接3.使用query()查询4.使用store_result(mysql)获取结果集。原创 2024-09-02 09:27:21 · 636 阅读 · 0 评论 -
HTTP分析
用线程池(半同步版反应堆)来并发处理用户请求,listenfd上监听的通过accept接手之后,返回一个新的fd名为connfd用于和用户通信。I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。通过HTTP协议和客户端进行通信,接收,存储,处理HTTP请求,并且做出相应,给出图片,网页,视频,或者error。来了事件,我操作系统来处理,处理完通知应用进程,异步。IP+端口号,要TCP三次握手,然后生成HTTP请求报文,通过TCP/IP发送到服务器上。原创 2024-08-30 10:29:23 · 711 阅读 · 0 评论 -
webserver.cpp详解
>优雅关闭:根据m_OPT_LINGER的值设置套接字选项SO_LINGER。如果m_OPT_LINGER为0,表示优雅关闭,底层会尝试发送完所有未发送的数据再关闭连接。用于初始化数据库连接池。管道的使用:统一事件源,因为信号处理和IO处理不是一条路,而通过管道,信号处理的函数可以用管道传递给主循环,这样信号和其他fd都可以epoll检测,统一处理。m_pool是一个指向threadpool<http_conn>类的指针,它根据m_actormodel和m_thread_num参数初始化线程池。原创 2024-08-29 10:46:04 · 501 阅读 · 0 评论 -
webserver.h详解
目的是提供一个完整的Web服务器框架,包括网络监听、事件处理、数据库连接管理、线程池管理等功能。webserver.h头文件。原创 2024-08-28 10:22:11 · 356 阅读 · 0 评论 -
Main.cpp详解
调用server对象的eventLoop方法,这是服务器的主事件循环,它将处理所有网络事件,如客户端连接、请求等。创建了一个WebServer类的对象server,这个类可能包含了启动和管理Web服务器所需的所有功能。调用server对象的trig_mode方法,可能用于设置服务器的触发模式。调用server对象的sql_pool方法,可能用于初始化数据库连接池。调用server对象的thread_pool方法,可能用于初始化线程池。调用server对象的log_write方法,可能用于初始化日志记录。原创 2024-08-28 10:15:27 · 209 阅读 · 0 评论 -
config.h-config.cpp详解
而执行到recv时,os会直接把这个工作队列的进程移到socket的等待队列,所以这个既会被阻塞(等待接收),又不影响工作队列(不影响cpu)而epoll分开了。用epoll_ctl维护等待队列,用epoll_wait阻塞进程,(功能的分离)读一个fd,不管他可不可以读写,都会立刻返回,返回失败会设置errno码通知,而不是卡着不动。因为一个进程创建socket时候,os会给他创建一个由文件系统管理的socket对象,包括。读一个阻塞的fd时,如果没有数据可读,就会一直卡在调用函数上,一直等到可读。原创 2024-08-28 10:10:08 · 1206 阅读 · 0 评论