webserver
文章平均质量分 65
c++实现一个简易webserver
暗色光
学无止境,欢迎交流
展开
-
webserver介绍与实现(利用各模块的封装实现)
前言此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改。原项目地址:https://github.com/qinguoyi/TinyWebServer服务器基本规范服务器框架服务器程序虽然种类繁多,但是基本框架都是一样的。I/O处理单元是服务器管理客户连接的模块。它通常要完成以下工作: 等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是,数据的收发不一定在I/О处理单元中执行,也可能在逻辑单元中执行,具体在何处执行取决于事件处理模式(rea原创 2021-11-19 16:30:10 · 13548 阅读 · 2 评论 -
webserver之定时器
前言此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改。原项目地址:https://github.com/qinguoyi/TinyWebServer定时器网络程序通常需要处理定时事件,例如定期检测客户连接的活动状态,因为非活跃连接占用了连接资源,需要定期检测释放非活跃连接。通常将定时事件封装为定时器类,然后使用排序链表、时间轮等数据结构管理定时器。linux提供了三种定时方法,1.socket选项SO_RCVTIMEO和SO_SNDTIMEO2.SIGALRM信原创 2021-11-12 17:02:50 · 2180 阅读 · 0 评论 -
webserver之mysql模块
前言此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改。原项目地址:https://github.com/qinguoyi/TinyWebServermysql模块逻辑:单例模式,RAII机制使用以空间换时间的思想,使用连接池的模式初始化多个mysql连接,采用单例懒汉模式创建连接池,使用信号量表示空闲连接数,管理连接出池入池,并且在入池出池操作前加锁,避免操作冲突。使用RAII机制,将外部获取连接封装到类connectionRAII中,在该类的构造函数中获取连接池中原创 2021-10-25 20:44:04 · 646 阅读 · 0 评论 -
webserver之处理HTTP请求
前言此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改。原项目地址:https://github.com/qinguoyi/TinyWebServer测试效果先放一波效果图HTTP请求HTTP GET请求行内容。第一行为请求行,分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割。后面都是头部字段。在所有头部字段之后,HTTP请求必须包含一个空行,以标识头部字段的结束。请求行和每个头部字段都必须以结束(回车符和换行符)﹔而空行则必须原创 2021-10-14 15:36:07 · 1308 阅读 · 0 评论 -
线程同步的三种机制
线程同步线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。即是避免同时操作变量,产生冲突。POSIX信号量信号量大于0时,等待信号量的线程被唤醒sem_init(sem_t* sem, int pshared, unsigned int value)初始化信号量,默认为进程共享的,pshared = 0指定为局部信号量,value为初始值sem_wait(sem_t* sem)阻塞原创 2021-09-24 19:35:17 · 1441 阅读 · 0 评论 -
webserver之日志系统
前言此博客记录对于TinyWebServer项目的学习,并根据自己的理解做出些许更改。原项目地址:https://github.com/qinguoyi/TinyWebServerLog日志系统是用来存储程序运行中的通知信息、warning、error等。首要任务就是格式化输出字符串到一个文件,还应当记录消息产生的时间,此系统选择使用按天作为文件名。以消费者-生产者模式,使用阻塞队列实现线程异步处理Log消息。还实现了主线程同步处理Log消息。Log.h从头文件可以清楚看出Log类具有的功原创 2021-09-29 15:45:41 · 1585 阅读 · 1 评论 -
webserver之使用数组实现阻塞队列
阻塞队列阻塞队列特性,当队列中没有元素时,对这个队列的弹出操作将会被阻塞,直到有元素被插入时才会被唤醒;当队列已满时,对这个队列的插入操作就会被阻塞,直到有元素被弹出后才会被唤醒。queue容器在程序结束时才会释放内存,deque可以动态释放,也可使用new分配容器再使用delete释放,vector* vec_ptr = new vector;delete vec_ptr;使用数组实现可以预留出固定大小的内存,个人理解使用数组的优势所在。代码实现#ifndef BLOCK_QUEUE_原创 2021-09-28 09:52:39 · 253 阅读 · 0 评论