首页 > 系统相关 >Linux下c++开发的轻量级、高性能、高并发的web服务器

Linux下c++开发的轻量级、高性能、高并发的web服务器

时间:2022-12-30 17:25:40浏览次数:70  
标签:web HTTP 请求 端口 c++ 响应 线程 解析 轻量级

 代码:WebServer.zip

项目描述:

通过 HTTP 协议与客户端(通常是浏览器(Browser))进行通信,来接收、存储、处理来自客户端的 HTTP 请求,并对其请求做出 HTTP 响应,返回给客户端其请求的内容(文件、页等)或返回一个 Error 信息

项目环境:

Centos7 + Visual Studio Code + gcc

项目步骤:

1.规划整个项目的架构及流程

   架构 :线程池+非阻塞socket+epoll+事件处理的并发模型 、 状态机解析HTTP请求

   同步 I/O 模拟 Proactor 模式的工作流程:

   

 

2.线程同步机制类封装及线程池实现

   同步机制类封装(临界区) :

                        互斥锁类 条件变量类 信号量类

   线程池实现:

                         成员变量:线程池线程数量、线程池数组、最大请求量、请求队列、请求队列锁、请求队列信号量、是否结束线程

                        成员函数:构造函数、析构函数、追加函数

3.项目整体流程代码实现

     1.接收端口(在接收端口之前要一个判断是否有输入端口)

     2.处理SIGPIPE信号

     3.创建线程池

     4.创建http_conn用户组users

     5.创建监听的socket(端口记得设置为端口复用)

     6.创建epoll,用来 管理服务器监听端和客户端的socket描述符

     7.while循环,处理数据

4.解析HTTP请求报文

      请求报文格式:

     

     1.把缓冲区内容一行行解析出来,判断依据\r\n

     2.解析HTTP请求行,获得请求方法,目标URL,以及HTTP版本号

     3.解析HTTP请求的头部信息

     4.判断消息体(即请求数据)是否被完整读入

     5.主状态机解析请求

5.解析请求完成及生成响应信息

当得到一个完整、正确的HTTP请求时,通过内存映射的方式获取文件

    响应报文格式:

    

  生成响应文件的思想跟解析请求文件是差不多的:生成状态行、响应头、响应体(即响应正文)

 

 

      

标签:web,HTTP,请求,端口,c++,响应,线程,解析,轻量级
From: https://www.cnblogs.com/balabalabubalabala/p/17013210.html

相关文章

  • C++基础入门
    C++基础入门1C++初识1.1第一个C++程序编写一个C++程序总共分为4个步骤创建项目创建文件编写代码运行程序1.1.1创建项目​ VisualStudio是我们用来编写C++......
  • 1.Web基本概念&2.Web服务器
    JavaWeb1.Web基本概念&2.Web服务器1.基本概念1.1、前言web开发:web:网页www.baidu.comhttp:80https:443静态webhtml,css提供给所有人看的数据始终不会发......
  • C/C++商品销售管理系统
    C/C++商品销售管理系统设计一个简单的商品销售管理系统,此系统具备以下功能:(1)商品录入:输入商品的相关信息,字段包括:编号、名称、单价等。(2)商品销售:输入商品编号、销售量。......
  • Nginx WEB服务器入门简介及安装
    Nginx(WEB服务器)简介Nginx (enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(......
  • Tomcat WEB服务器日志切割
    cronolog简介cronolog是一个简单的过滤程序,读取日志文件条目从标准输入和输出的每个条目并写入指定的日志文件的文件名模板和当前的日期和时间。当扩展文件名的变化,目前的......
  • websocket demo
    js====>nodewstest.jsvarws=require('nodejs-websocket');constPORT=3000;varserver=ws.createServer((conn)=>{console.log("链接成功");conn......
  • C++字符串分割字符串
    #include<iostream>#include<vector>std::vector<std::string>split_str(std::string&str,conststd::string&separator){size_tpos=0;std::vecto......
  • pytorch模型onnx部署(python版本,c++版本)
    转载:实践演练BERTPytorch模型转ONNX模型及预测-知乎(zhihu.com)使用bRPC和ONNXRuntime把BERT模型服务化-知乎(zhihu.com)1.安装anaconda一般有图形界面的个人电......
  • Spring MVC的web.xml配置详解
    SpringMVC是创建javaweb项目时比较常用的框架,其中web.xml配置文件是更不可少的,那么首先先了解javaweb中的web.xml文件。一、认识web.xml文件1、web.xml的作用首先java......
  • .net6 webApi IoC SqlSugar的日常使用
    .Net6WebApi使用SqlSugar1、Nuget先引入:SqlSugarCore2、NetIOC1、注入ISqlSugarClient.NET自带的IOC使用也很方便 先封装一个操作类  //建一个扩展类publ......