C++(也许算是吧)+Linux 简易web服务器实现(with EPOLL&THREAD POLL)(1)

C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进) Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器 阅读详情

简述

大约一个多月前有选择性地看完了unix网络编程这本书,知道了基本的SOCKET操作和流程,知道了在SOCKET下进行I/O操作时的一些注意事项,然而,还是觉得应该把这本书学过的一些东西揉在一起做个小玩意儿出来才尽兴啊,要不然啥也记不住啊。
所以使用了epoll+线程池的模型实现了一个简易的web服务器,多简易?

只支持HTTP协议中的get方式获取网页。

我的服务器的实现基础是逻辑上单线程,I/O处理时使用多线程。

代码发布在了EZweb。

逻辑模型

因为没有阅读过任何关于服务器的源码或者实现思路,所以基本上是自己摸黑写出来的,我的逻辑流程图可以用下面这幅图来表示:

EZweb

首先就是每次都要做的初始化套接字,然后监听9898端口,我就是不想用HTTP协议的80.。
然后将监听套接字设置为非阻塞,这点很重要,后面我会说。并配置epoll管理监听套接字的event为边缘触发(也很重要,后面我也会说)。然后进入epoll_wait,epoll_wait会返回可处理的event的数量并处理作为值-参数传入的events数组。接下来对每一个event,都交由线程池来处理,并进行I/O处理以及读写之间的状态跳转。此时主进程会阻塞在等待条件变量的地方。当所有的线程处理完应该处理的任务后,给主线程发信号,主线程继续进入epoll_wait等待新的请求。

这就是我说的逻辑单线程,I/O多线程。

待续

太晚了,明天我会继续介绍实现的细节以及一些名词的含义。

EZweb
这个项目如果fork下来的话,可以编译后使用,具体方法是:

  1. 在linux系统下,在项目文件目录使用g++ -std=c++11 *.cpp -o EZweb -pthread进行编译
  2. 运行编译出来的EZweb
  3. 在本机浏览器输入127.0.0.1:9898即可访问示例网页,目前我放在webSiteSrc文件夹中的示例网页是全部的C++标准内容。在局域网内的其他主机可以输入本机ip:9898访问示例网页
  4. 以后也许我会考虑提供一些命令行参数,可以配置主页面目录,线程数,等等。不过现在如果你希望跑自己的网页还是需要改代码,因为我写死在程序里了。
  5. over。
掌握Linux C++轻量级Web服务器开发:TinyWebServer项目实战 本文还有配套的精品资源,点击获取 简介:TinyWebServer是一个用C++编写的轻量级Web服务器,专为Linux系统设计。它提供了深入学习Web服务器工作原理和本地开发小型项目的机会。项目涵盖了网络套接字编程、多线程处理、HTTP协议解析等关键系统编程技术,并允许通过源代码分析学习和实践。开发者可以通过扩展TinyWebServer来学习更多关于Web服务器的深入知... 阅读详情

相关推荐

epoll多线程高并发服务器代码

linux下完整的epoll多线程高并发服务器代码

Linux下C++轻量级WebServer服务器 框架梳理

WebServer是一个很好的入门级C++项目,因为它涉及到了方方面面,不仅可以提高编程能力,还包括了操作系统、计算机网络、数据库等方面的知识,所以我很推荐大家去入手这个项目。说细一点这个项目包含锁机制、日志系统、线程池、http处理、并发模型等实现,但是很多人一开始做这个项目的时候,会觉得逻辑很混乱从而无从下手,所以我写下这篇文章目的就是帮助大家起到一个梳理逻辑的作用,好了废话不多说,咱们往下看!

qq_58220428的博客 6896

c语言实现的简单赛车游戏

用C语言实现的简单赛车游戏,在框架代码的基础上编写,结合汇编语言共同实现

Linux下C++轻量级Web服务器(含源码和测试地址)

公网ip。

qq_42856609的博客 871

WebServer:C ++ Linux Web服务器服务器

网络服务器 用C ++实现的高性能WEB服务器,通过webbenchh压力测试可以实现上万的QPS 功能 利用IO复合技术Epoll与线程池实现多线程的React器高并发模型; 利用正则与状态机解析HTTP请求报文,实现处理静态资源的请求; 利用标准库容器封装char,实现自动增长的边界; 基于小根堆实现的计时器,关闭超时的非活动连接; 利用单例模式与双向同步实现异步的日志系统,记录服务器运行状态; 利用RAII机制实现了数据库连接池,减少了数据库连接建立与关闭的开销,同时实现了用户注册登录功能。 增加logsys,threadpool测试单元(待办事项:计时器,sqlconnpool,httprequest,httpresponse) 环境要求 Linux C ++ 14 的MySql 目录树 . ├── code 源代码 │ ├── buffer │   ├─

MyWebServer:linux下用c ++实现的可支持上万并发的web服务器

MyWebServer 一个linux系统下的C ++轻量级Web服务器,进行学习和实践网络编程。经测试支持上万并发连接。 C / C ++ B / S模型 React器事件处理模式 ET模式非双边IO的epoll 半同步/半React堆螺纹池 时间轮实现的定时器处理非活动连接 编译环境 的Ubuntu的20.04 海湾合作委员会9.3.0 cmake 3.16 的c + + 17 编译过程 cmake。 制作 使用方法 直接运行MyWebServer时使用串行端口号2132。使用-p扩展号选项可设置服务器运行的端口号。 压力测试 使用webbench进行上万并发的压力测试通过。 webbench -c 10000 -t 10

TinyWebServer:Linux下C++轻量级Web服务器

TinyWebServer:Linux下C++轻量级Web服务器 去发现同类优质开源项目:https://gitcode.com/ 在当前的互联网时代,Web服务器的性能和资源消耗成为了开发者关注的焦点。本文将为您详细介绍一款在Linux系统下运行的C++轻量级Web服务器——TinyWebServer。让我们一起了解它的核心功能、技术分析、应用场景以及项目特点。 项目介绍 TinyWebServ...

gitblog_06781的博客 846

基于linux c实现web服务器

基于linux通过c实现web服务器,适合新手 学习了知识点,然后通过项目巩固一下知识点,也可以了解http协议。

【C++】用C++在Linux环境下实现简单的Web服务器

Web服务器的核心任务是处理客户端发来的HTTP请求并返回HTTP响应。实现这一功能的第一步是理解网络套接字。套接字是一种允许程序与网络通信的机制。以下是用C++编写一个简单Web服务器的基本框架。你可以通过浏览器访问。服务器启动后,将监听。

2403_86785171的博客 1533

RPCA模型及GoDec算法

一、基础知识 在线性代数中,秩的物理意义是矩阵中最大的不相关的向量个数,因此秩可以用来度量相关性;而在图像处理中,秩就可以理解为图像中所包含的信息的丰富程度。图片中比较突兀的成分,会增加图像矩阵的秩,一幅清晰的自然图像其数据矩阵往往是低秩或者近似低秩的,这是因为其中的图像信息有很大的相关性,但如果图像中引入噪声,那么存在随机幅值任意大但是分布稀疏的误差破坏了原有数据的低秩性。 低秩矩阵:如果AAA是一个m×nm×nm×n的矩阵,rank(A)rank(A)rank(A)是矩阵AAA的秩,如果rank(A)

小席的学习日志 7687

Plot3d 网格数据格式

PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。

weixin_62592231的博客 3720

Linux网络编程——C/C++Web服务器(二):IO多路复用select/poll/epoll实现服务器监听多客户端事件

同步IO多路复用——使用select/poll/epoll实现服务器同时监听多客户端的事件,通过单线程循环处理事件。分别介绍与对比了select、poll和epoll的实现流程、代码和改进的地方。

GIS热爱者 2274

SAP数据导入避坑指南:财务期初上线实操全流程(含常见错误排查)

本文详细解析了SAP财务期初数据导入的全流程,包括数据准备、主数据标准化、余额与未清项导入等关键步骤,并提供了常见错误排查和解决方案。特别强调了过渡科目和存货价值的处理技巧,帮助企业在SAP系统上线时避免数据导入陷阱,确保财务数据的准确性和系统平稳运行。

weixin_30832143的博客 396

C++初级项目-webserver(1)

Web服务器是一个基于Linux的简单的服务器程序,其主要功能是接收HTTP请求并发送HTTP响应,从而使客户端能够访问网站上的内容。本项目旨在使用C++语言,基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接。

莫浅子的博客 1713

FFmpeg魔改指南:让RTMP协议完美兼容H265的三种方法(含SRS适配技巧)

本文详细介绍了三种让RTMP协议兼容H265编码的FFmpeg魔改方案,包括基于官方补丁的标准改造、Intel的SVT-HEVC集成方案以及金山云的自定义扩展方案。文章重点解析了各方案的实现原理与适配技巧,并提供了在SRS 6.0服务器上进行深度配置和性能调优的完整实战指南,帮助开发者解决H265推流至传统RTMP服务器的兼容性问题。

weixin_29290947的博客 195

从泛光成像到可寻址扫描:Flash激光雷达的车规级优势与技术演进

Flash激光雷达凭借固态架构优势成为自动驾驶感知技术的重要发展方向。该方案无机械部件,具备抗振动、长寿命等特点,同时CMOS工艺带来显著成本优势。但传统泛光式存在能量弥散问题,难以兼顾大视场和远距离探测。可寻址扫描技术通过分区点亮VCSEL阵列,有效提升局部能量密度,在保持固态可靠性的同时突破性能瓶颈。这种"电子扫描+分区点亮"的混合架构,使Flash激光雷达有望实现大视场、远距离、高可靠和低成本的多重突破,推动自动驾驶技术发展。

致力于lidar应用开发 233

C++入门项目:Linux下C++轻量级Web服务器 项目详解(小白篇)

Linux下C++轻量级Web服务器 项目详解

weixin_45754224的博客 1216

【调优】OpenClaw调优之模型(tokens)篇

OpenClaw用户常遇四大痛点:规则被无视、API账单暴涨、低效模型选择、记忆丢失。通过/context list命令可解析上下文组成,包括工作区配置、引导参数限制、系统提示词等关键信息。重点需关注Token消耗来源,如核心配置文件、技能工具说明等,避免静默截断。建议精简非必要内容,优化记忆机制,平衡功能与成本。该分析帮助用户减少无效操作,合理控制API支出。

海兰 990

c/c++ webserver项目(linux 高性能服务器编程,游双)

最近在阅读游双的《linux高性能服务器编程》,看到后面跟着里面的代码敲了一个webserver。该项目采用同步io实现的proactor框架,用epoll实现io多路复用。

weixin_57106674的博客 3790

手把手教你学Simulink--基于Simulink的高速公路自动驾驶场景仿真建模

特点车道保持:自动调整车辆方向以保持在车道中央。自适应巡航控制(ACC):根据前方车辆的速度自动调节车速。换道辅助:安全地变换车道以超过慢速行驶的车辆或准备驶离高速公路。紧急制动:检测潜在碰撞并采取措施避免事故。挑战安全性:确保所有功能在各种条件下都能可靠运行。实时性:处理大量传感器数据,并迅速做出反应。复杂性:集成多个子系统,包括感知、规划与控制。首先明确要模拟的任务内容。车辆需保持在车道内行驶。根据交通情况自动调整速度。安全地执行换道操作。在必要时实施紧急制动。

MHD0815的博客 247

VS2019编译使用log4cplus 1.2.0

logger.properties 文件。第三步,创建项目来测试,配置库。第二步,使用VS2019编译。

h a 6 6 6 c k 为 你解决复杂难题! 527

Web服务器项目详解(二)

目录 04 http连接处理(上) 本文内容 epoll HTTP报文格式 HTTP状态码 有限状态机 http处理流程 05 http连接处理(中) 本文内容 流程图与状态机 代码分析-http报文解析 06 http连接处理(下) 本文内容 基础API 流程图 代码分析 04 http连接处理(上) 本文内容 在服务器项目中,http请求的处理与响应至关重要,关系到用户界面的跳转与反馈。这里,社长将其分为上、中、下三个部分来讲解,具体的: 上篇,梳理...

qq_37032670的博客 1870

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++实现web服务器(Linux)

运行./server后其实服务器已经启动,就不需要下面的这些步骤,下面步骤只是做一个监听,不影响使用。在浏览器中输入127.0.0.1:8080即可看到如下页面。首先下载项目到linux系统中,然后进入yazi-web-main目录,使用make编译,编译结束后运行。以下是监听端口,需要先下载net-tools。

ljjjjjjjjjjj的博客 1871

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux下Web服务器开发

web服务器开发,练习指南。

小明的专栏 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux C++ 实现简易小型的Web服务器httpd

在这个简易版的Web服务器中,实现了GET静态数据,以及动态数据。   下面的是代码,其中有注释,可以很容易看明白。   #include #include #include #include #include #include #include #include #include #include #include #include #include #

XD 1万+

基于epoll实现简单的web服务器

1. 简介 epoll 是 Linux 平台下特有的一种 I/O 复用模型实现,于 2002 年在 Linux kernel 2.5.44 中被引入。在 epoll 之前,Unix/Linux 平台下的 I/O 复用模型包含 select 和 poll 两个系统调用。随着因特网的发展,因特网的用户量越来越大,C10K 问题出现。基于 select 和 p...

weixin_34194359的博客 469
上一篇: C++对象模型<一>
下一篇: python无脑搜索引擎实现<一>
skillness2
博客等级 码龄16年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值