随笔分类 -  事件驱动模型

摘要:踩坑 在此项目中遇到的一些比较有意义的问题 大文件传输 先看下游双书上发送逻辑这块的代码,发送数据只调用了writev函数,并对其返回值是否异常做了处理。 bool http_conn::write() { int temp = 0; int byte_have_send = 0; int byte 阅读全文
posted @ 2023-10-06 21:14 Emma1111 阅读(211) 评论(0) 推荐(0) 编辑
摘要:整体概述 本项目中,使用数据库连接池实现服务器访问数据库的功能,使用POST请求完成注册和登录的校验工作。 本文内容 本篇将介绍同步实现注册登录功能,具体的涉及到流程图,载入数据库表,提取用户名和密码,注册登录流程与页面跳转的的代码实现。 流程图 具体的,描述了GET和POST请求下的页面跳转流程。 阅读全文
posted @ 2023-10-06 21:14 Emma1111 阅读(28) 评论(0) 推荐(0) 编辑
摘要:基础知识 什么是数据库连接池? 池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化。通俗来说,池是资源的容器,本质上是对资源的复用。 顾名思义,连接池中的资源为一组数据库连接,由程序动态地对池中的连接进行使用,释放。 当系统开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中 阅读全文
posted @ 2023-09-25 22:19 Emma1111 阅读(62) 评论(0) 推荐(0) 编辑
摘要:日志系统分为两部分,其一是单例模式与阻塞队列的定义,其二是日志类的定义与使用。 本篇将介绍日志类的定义与使用,具体的涉及到基础API,流程图与日志类定义,功能实现。 基础API ,描述fputs,可变参数宏__VA_ARGS__,fflush 流程图与日志类定义 ,描述日志系统整体运行流程,介绍日志 阅读全文
posted @ 2023-09-24 10:39 Emma1111 阅读(45) 评论(0) 推荐(0) 编辑
摘要:基础概念 日志,由服务器自动创建,并记录运行状态,错误信息,访问数据的文件 同步日志,日志写入函数与工作线程串行执行,由于涉及到I/O操作,当单条日志比较大的时候,同步模式会阻塞整个处理流程,服务器所能处理的并发能力将有所下降,尤其是在峰值的时候,写日志可能成为系统的瓶颈。 生产者-消费者模型 ,并 阅读全文
posted @ 2023-09-19 22:50 Emma1111 阅读(98) 评论(0) 推荐(0) 编辑
摘要:定时器处理非活动连接模块,主要分为两部分,其一为定时方法与信号通知流程,其二为定时器及其容器设计、定时任务的处理。 本篇对第二部分进行介绍,具体的涉及到定时器设计、容器设计、定时任务处理函数和使用定时器。 定时器设计,将连接资源和定时事件等封装起来,具体包括连接资源、超时时间和回调函数,这里的回调函 阅读全文
posted @ 2023-09-19 20:42 Emma1111 阅读(94) 评论(0) 推荐(0) 编辑
摘要:基础知识 非活跃,是指客户端(这里是浏览器)与服务器端建立连接后,长时间不交换数据,一直占用服务器端的文件描述符,导致连接资源的浪费。 定时事件,是指固定一段时间之后触发某段代码,由该段代码处理一个事件,如从内核事件表删除事件,并关闭文件描述符,释放连接资源。 定时器,是指利用结构体或其他形式,将多 阅读全文
posted @ 2023-09-17 22:41 Emma1111 阅读(65) 评论(0) 推荐(0) 编辑
摘要:上一篇主要对状态机和服务器解析请求报文做了介绍。本篇将介绍服务器如何响应请求报文,并将该报文发送给浏览器端。首先介绍一些基础API,然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分,梳理stat、mmap、iovec、writev 流程图部分,描述服务器端响应请求报文的逻辑,各模块 阅读全文
posted @ 2023-09-10 23:00 Emma1111 阅读(65) 评论(0) 推荐(0) 编辑
摘要:上篇对http连接的基础知识、服务器接收请求的处理流程进行了介绍,本篇将结合流程图和代码分别对状态机和服务器解析请求报文进行详解 流程图部分:描述主,从状态机调用关系与状态转移过程 代码部分:结合代码对http请求报文的解析进行详解 流程图与状态机 从状态机负责读取报文的一行,主状态机负责对该行数据 阅读全文
posted @ 2023-09-09 21:04 Emma1111 阅读(74) 评论(0) 推荐(0) 编辑
摘要:概述 在服务器项目中,http请求的处理与响应至关重要,关系到用户界面的跳转与反馈,这里将分为上、中、下三个部分简介,具体如下: 上篇:梳理基础知识,结合代码分析HTTP类及请求接收 中篇:结合代码分析请求报文分析 下篇:结合代码分析请求报文响应 基础知识方法,包括epoll、HTTP报文格式、状态 阅读全文
posted @ 2023-09-09 12:32 Emma1111 阅读(76) 评论(0) 推荐(0) 编辑
摘要:# 基础知识 ## 静态成员变量 将类成员变量声明为static,则为静态成员变量,与一般的成员变量不同,无论建立多少对象,都只有一个静态成员变量的拷贝,静态成员变量属于一个类,所有对象共享。 静态变量在编译阶段就分配了空间,对象还没创建时就已经分配了空间,放到了全局静态区。 * 静态成员变量 * 阅读全文
posted @ 2023-09-08 13:18 Emma1111 阅读(25) 评论(0) 推荐(0) 编辑
摘要:本篇主要围绕服务器项目中涉及的知识进行介绍,详细可参考《Linux下高性能服务器编程》。 # 服务器编程基本框架 主要由I/O单元,逻辑单元和网络存储单元组成,其中每个单元之间通过请求队列进行通信,从而协同完成任务。 I/O单元:用于处理客户端连接,读写网络数据; 逻辑单元:用于处理业务逻辑的线程; 阅读全文
posted @ 2023-09-07 17:40 Emma1111 阅读(69) 评论(0) 推荐(0) 编辑
摘要:RAII RAII译名为"资源获取即初始化" 在构造函数中申请分配资源,在析构函数中释放资源。因为C++的机制保证了吗,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。所以,在RAII的指导下,应该使用类来管理资源,将资源和对象的生命周期绑定 RAII的核心思想是将 阅读全文
posted @ 2023-09-07 17:33 Emma1111 阅读(24) 评论(0) 推荐(0) 编辑
摘要:# Proactor模型 Reactor是非阻塞同步网络模式,而Proactor是异步网络模式。 **阻塞I/O**:当程序执行read,线程会被阻塞,一直等到内核数据准备好,并把数据从内核缓冲区拷贝到应用程序的缓冲区中,当拷贝过程完成,read才会返回。阻塞等待的是"内核数据准备好"和"数据从内核 阅读全文
posted @ 2023-07-08 22:15 Emma1111 阅读(164) 评论(0) 推荐(0) 编辑
摘要:# Reactor模式 Reactor模式是非阻塞同步网络模式,主要由Reactor和处理资源池这两个核心部分组成,负责: * Reactor负责监听和分发事件,事件类型包含连接事件,读写事件; * 处理资源池负责处理事件,如read->处理逻辑->send Reactor模式是灵活多变的,可以应对 阅读全文
posted @ 2023-07-08 20:46 Emma1111 阅读(84) 评论(0) 推荐(0) 编辑
摘要:1.核心数据结构 时间触发型事件结构体 // eos定时器事件 typedef struct eos_event_timer { eos_u32_t topic : 13; // 事件主题 eos_u32_t oneshoot : 1; // 是否单次触发 eos_u32_t unit : 2; / 阅读全文
posted @ 2022-11-23 22:02 Emma1111 阅读(582) 评论(0) 推荐(0) 编辑
摘要:EventOS Nano是什么? EventOS Nano是一个面向单片机、事件驱动的、分布式的、可跨平台开发的嵌入式开发平台。主要有两大技术特色:事件驱动和超轻量 EventOS主要特性如下: 事件总线为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特 阅读全文
posted @ 2022-07-18 22:00 Emma1111 阅读(713) 评论(0) 推荐(0) 编辑
摘要:快速入门 EventOS Nano非常简单,除源码外,只需要实现三个代码,就可以使用EventOS Nano编写程序 main.c main函数,初始化和启动EventOS eos_port.c 如EventOS在特定平台上的接口实现,就是EventOS Nano移植的相关代码 eos_led.c 阅读全文
posted @ 2022-07-18 20:26 Emma1111 阅读(820) 评论(0) 推荐(0) 编辑