TinywebServer代码详解-http连接处理-上(4)
TinywebServer代码详解–http连接处理-上(4)该blog内容转自:最新版Web服务器项目详解 - 04 http连接处理(上)
该blog对上述内容进行补充(在本人的角度)
结合此前该项目记录的blog一起学习:TinywwebServer知识点(3)(点击跳转)
结合此前该项目记录的blog一起学习:TinywwebServer知识点(1)(点击跳转)
结合此前记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、I/O复用IO复用是一种允许程序同时监控多个文件描述符的机制,从而使得程序可以在某个或多个文件描述符准备好进行IO操作(读或写)时得到通知并进行处理
该项目实现I/O多路转接复用的方式是epoll
epoll 全称 eventpoll,是linux内核实现IO多路转接/复用(IO multiplexing)的一个实现。**IO多路转接的意思是在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作** ...
TinywebServer代码详解-半同步半反应堆线程池-下(3)
TinywebServer代码详解–半同步半反应堆线程池-下(3)该blog内容转自:最新版Web服务器项目详解 - 02 半同步半反应堆线程池(下)
该blog对上述内容进行补充(在本人的角度)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.静态成员变量将类成员变量声明为static,则为静态成员变量,与一般的成员变量不同,无论建立多少对象,都只有一个静态成员变量的拷贝,静态成员变量属于一个类,所有对象共享
静态变量在编译阶段就分配了空间,对象还没创建时就已经分配了空间,放到全局静态区
静态成员变量注意事项:
最好是类内声明,类外初始化(以免类名访问静态成员访问不到)
无论公有,私有,静态成员都可以在类外定义,但私有成员仍有访问权限
非静态成员类外不能初始化
静态成员数据是共享的
2.静态成员函数将类成员函数声明为static,则为静态成员函数
静态成员函数可以直接访问静态成员变量,不能直接访问普通成员变量,但可以通过参数传递的方式访问
普通成员函数可以访问普通成员变量,也可以访问静态成员变量
静态成员函数没有this指针。非静态数 ...
TinywebServer代码详解-半同步半反应堆线程池(2)
TinywebServer代码详解–半同步半反应堆线程池(2)该blog内容转自:最新版Web服务器项目详解 - 02 半同步半反应堆线程池(上)
该blog对上述内容进行补充(在本人的角度)
结合此前牛客项目记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.服务器编程框架服务器基本编程框架如下图:
模块
功能
I/O 处理单元
处理客户连接,读写网络数据
逻辑单元
业务进程或线程
网络存储单元
数据库、文件或缓存
请求队列
各单元之间的通信方式
IO处理单元:服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是数据的收发不一定在 I/O 处理单元中执行,也可能在逻辑单元中执行,具体在何处执行取决于事件处理模式
逻辑单元:一个逻辑单元通常是一个进程或线程。它分析并处理客户数据,然后将结果传递给 I/O 处理单元或者直接发送给客户端(具体使用哪种方式取决于事件处理模式 ...
TinywebServer代码详解-线程同步机制封装类(1)
TinywebServer代码详解–线程同步机制封装类(1)原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.RAII
RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”.
在构造函数中申请分配资源,在析构函数中释放资源。因为C++的语言机制保证了,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。所以,在RAII的指导下,我们应该使用类来管理资源,将资源和对象的生命周期绑定
RAII的核心思想是将资源或者状态与对象的生命周期绑定,通过C++的语言机制,实现资源和状态的安全管理,智能指针是RAII最好的例子
2.信号量可以查看之前学习爱编程的大丙,记录的Blog:多线程与线程同步(点击跳转)
3.互斥量可以查看之前学习爱编程的大丙,记录的Blog:多线程与线程同步(点击跳转)
4.条件变量可以查看之前学习爱编程的大丙,记录的Blog:多线程与线程同步(点击跳转)
二、代码解析lock/locker.h代码较为简单
类中主要是 ...
TinywebServer知识点(3)
TinywebServer知识点(3)该blog内容转自:小白视角:一文读懂社长的TinyWebServer(Raw_Version)
该blog对上述内容进行补充(在本人的角度)
结合此前牛客项目记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、WebServer服务器1.客户端如何与web服务器通信通常用户使用Web浏览器与相应服务器进行通信。在浏览器中键入“域名”或“IP地址:端口号”,浏览器则先将你的域名解析成相应的IP地址或者直接根据你的IP地址向对应的Web服务器发送一个HTTP请求。这一过程首先要通过TCP协议的三次握手建立与目标Web服务器的连接(**HTTP协议底层是通过TCP协议去通讯的**),然后HTTP协议生成针对目标Web服务器的HTTP请求报文,通过TCP、IP等协议发送到目标Web服务器上
2.Web服务器如何接收客户端的HTTP请求Web服务器端通过socket监听来自用户的请求
123456789101112131415161718#include <s ...