![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
WebServer
文章平均质量分 93
epoll+线程池+HTTP解析
温酒煮青梅
初级打工人
展开
-
【面试专栏】自己整理的WebServer项目问题
1.怎样应对服务器的大流量、高并发客户端:尽量减少请求数量:依靠客户端自身的缓存或处理能力尽量减少对服务端资源的不必要耗费:重复使用某些资源,如连接池服务端:增加资源供给:更大的网络带宽,使用更高配置的服务器请求分流:使用集群,分布式的系统架构应用优化:使用更高效的编程语言,优化处理业务逻辑的算法2.线程池与多线程的设计思路设计一个任务队列,作为临界资源初始化n个线程,开始运行,对任务队列加锁取拿取任务执行当任务队列为空时,所有子线程(工作线程)阻塞(pthread_原创 2021-10-18 13:59:57 · 7599 阅读 · 0 评论 -
WebServer代码解读(5)【处理HTTP请求】【响应POST/GET请求】
文章目录1 - 处理HTTP请求1-1 处理POST请求1-2 处理GET请求1 - 处理HTTP请求这里只处理两种简单的HTTP请求,POST和GET首先来了解一下GET与POSTGET是想获取server数据,将请求的数据添加到URL中,以?分割URL和传输数据,参数值之间以&相连,因此GET不安全。GET产生一个TCP数据包,浏览器将HTTP header和data一起发送给server,server响应状态码200(请求正常处理完毕)(返回数据)POST是想修改server数据,原创 2021-06-06 21:39:10 · 2077 阅读 · 3 评论 -
WebServer代码解读(4)【解析HTTP请求】【解析请求行/请求头】【URI基础知识】
文章目录1 - 解析HTTP请求1-1 URI基础知识1-2 HTTP请求消息1-3 解析请求行1-4 解析请求头2 - 下一步工作1 - 解析HTTP请求1-1 URI基础知识首先了解一下什么是URI:统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来,可以理解为一个用于标识某一互联网资源名称的字符串。常见的URL(就是浏览器中输入的网址,比如http://www.163.com就是一个URL)就是URI的一个子集,URI能够定位网络上的各种资源,包含HTML文档、图像、视频、程原创 2021-06-01 16:16:40 · 2131 阅读 · 0 评论 -
WebServer代码解读(3)【最小堆定时器与队列】
文章目录1 - 处理事件1-1 接收新连接1-2 最小堆定时器1-4 将request加入线程池1-5 处理request1 - 处理事件因为epoll_wait函数已经返回了需要处理的事件数目events_num,并且已经将events_num个数的事件排到了数组的最前面,因此使用一个for循环取出前events_num个事件的data处理事件的逻辑为:遍历events_num若当前事件是新连接,接收新连接否则,判断该事件合法以后,将该事件的请求request加入线程池(使用工作线程处理该原创 2021-05-27 10:23:17 · 1249 阅读 · 1 评论 -
WebServer代码解读(2)【初始化server socket】【设置epoll事件】【注册描述符】【封装epoll_wait】
文章目录1 - server socketsocket创建、绑定、监听关于listen函数设置监听socket为非阻塞2 - 设置epoll事件epoll事件类型水平触发与边沿触发3 - 注册新描述符4 - 等待事件发生1 - server socket首先要创建server端的socket(socket函数),绑定端口(bind函数),开始监听(listen函数)绑定端口时注意,0-1023为知名端口号范围,能够bind的端口限制在1024-65535之间还要注意绑定的端口如果被占用(Addre原创 2021-05-21 20:49:49 · 494 阅读 · 0 评论 -
互斥锁和条件变量总结&接口介绍【pthread_mutex_init/lock/trylock/unlock/destroy】【pthread_cond_init/wait/timedwait/..】
文章目录0 - 前言1 - 互斥锁1-1 初始化锁1-2 加锁1-3 解锁1-4 销毁锁2 - 条件变量2-1 初始化条件变量2-2 等待条件变量2-3 唤醒线程2-4 销毁条件变量0 - 前言本文主要总结互斥锁和条件变量的关键接口参考:C语言技术网-线程同步条件变量1 - 互斥锁互斥锁时对于互斥资源(也叫临界资源)来说的,比如说有一个公共账户,有很多人都想对这个账户进行操作(存钱、取钱),为了保护账户操作的稳定,使用一种保障机制来保证同一时刻只有一个人操作账户。这种保障机制就是互斥锁。原创 2021-05-18 21:50:46 · 487 阅读 · 0 评论 -
WebServer代码解读(1)【main函数流程】【忽略SIGPIPE信号:handle_for_sigpipe】【创建EPOLL内核事件表】【线程池组成部分与工作逻辑】
文章目录1 - main函数1-1 handle_for_sigpipe1-2 epoll_init1-3 threadpool_create线程池的组成部分(概念)线程池的声明线程池的组成部分(代码与逻辑)创建线程池有哪几步创建线程池代码1 - main函数1-1 handle_for_sigpipehandle_for_sigpipe():忽略SIGPIPE信号,防止因为错误的写操作(向读端关闭的socket中写数据)而导致进程退出在tcp四次挥手过程中,发送方 向已经调用close()方法的原创 2021-05-17 20:53:34 · 1134 阅读 · 0 评论 -
epoll详解【epoll_create】【epoll_ctl】【epoll_wait】
文章目录0 - 前言1 - epoll接口epoll_createepoll_ctlepoll_wait0 - 前言参考:epoll机制:epoll_create、epoll_ctl、epoll_wait、close1 - epoll接口epoll_create#include <sys / epoll.h> nfd = epoll_creat(max_size);创建一个内核事件表 (也叫epoll句柄),nfd为epoll句柄(不了解句柄看下一段),参数max_size原创 2021-05-14 20:47:34 · 1869 阅读 · 1 评论 -
Linux高性能服务器框架【C/S】【P2P】【I/O模型】【Reactor】【池】【上下文切换和锁】
文章目录0 - 前言1 - 服务器模型1-1 C/S模型1-2 P2P模型2 - 服务器编程框架3 - I/O模型4 - 事件处理模式4-1 Reactor5 - 池6 - 上下文切换和锁0 - 前言本文是针对《Linux高性能服务器编程》的笔记1 - 服务器模型1-1 C/S模型![Alt](https://img-blog.csdnimg.cn/20210514194236123.png# =300)C/S(客户端/服务器)模型:所有客户端都通过服务器来获取所需的资源C/S的工作流程如 图原创 2021-05-14 19:48:19 · 401 阅读 · 1 评论