Webserver笔记

代码随想录的项目


LogStream.h

// 返回data_ char数组的数据末尾地址
const char* end() const { return data_ + sizeof data_; }

Logging.cpp

//定义一个 struct timeval 类型的变量 tv,用于存储当前的时间信息。
//定义一个 time_t 类型的变量 time,用于存储当前的时间戳。
//定义一个字符数组 str_t,用于存储格式化后的时间字符串。
//调用 gettimeofday 函数,获取当前的时间信息,并将其存储在 tv 变量中。
//将 tv 变量中的时间戳赋值给 time 变量。
//调用 localtime 函数,将 time 变量转换为本地时间,并将结果存储在 p_time 变量中。
//调用 strftime 函数,将 p_time 变量中的本地时间格式化为一个字符串,并将其存储在 str_t 数组中。
//将格式化后的时间字符串添加到日志信息中,并将其存储在 stream_ 变量中。
void Logger::Impl::formatTime()
{struct timeval tv;time_t time;char str_t[26] = {0};gettimeofday (&tv, NULL);time = tv.tv_sec;struct tm* p_time = localtime(&time);   strftime(str_t, 26, "%Y-%m-%d %H:%M:%S\n", p_time);stream_ << str_t;
}

FileUtil.cpp

//stream:一个指向 FILE 类型的指针,表示要设置缓冲区的文件流。
//buf:一个指向字符数组的指针,表示用户提供的缓冲区。
//size:一个 size_t 类型的变量,表示缓冲区的大小。
//当你调用 setbuffer 函数时,文件流将使用用户提供的缓冲区进行 I/O 操作。这样,在进行文件读写时
//数据首先被存储在缓冲区,然后再从缓冲区写入文件或从文件读取到缓冲区。这种方式可以减少实时读写操作的开销,提高性能。
AppendFile::AppendFile(string filename) : fp_(fopen(filename.c_str(), "ae")) {// 用户提供缓冲区setbuffer(fp_, buffer_, sizeof buffer_);
}

HttpData.cpp

mime这个map在h和cpp中都声明了,感觉cpp中的声明是没有必要的?
std::unordered_map<std::string, std::string> MimeType::mime;  // 16行

Timer这个文件包含两个类

TimerNode类主要维护一个http请求和超时时间,以及是否删除等等。
TimerManager类包含一个优先级队列,用来存放TimerNode对象
// 表示队列存放的数据类型是SPTimerNode,std::deque<SPTimerNode>表示队列的实现容器是deque,TimerCmp代表比较器
std::priority_queue<SPTimerNode, std::deque<SPTimerNode>, TimerCmp> timerNodeQueue;void TimerNode::update(int timeout) 更新超时时间// 这个函数的注释有点看不懂,我感觉就是被删除或者无效了,直接从堆里面删了啊
void TimerManager::handleExpiredEvent() {// MutexLockGuard locker(lock);while (!timerNodeQueue.empty()) {SPTimerNode ptimer_now = timerNodeQueue.top();if (ptimer_now->isDeleted())timerNodeQueue.pop();else if (ptimer_now->isValid() == false)timerNodeQueue.pop();elsebreak;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音合成-TTS文字转语音(专业版)

语音合成-TTS文字转语音(专业版) 一、工具简介 *使用强大的智能AI语音库&#xff0c;合成独具特色接近真人语音的朗读音频。 *使用极具表现力和类似人类的声音&#xff0c;使文本阅读器和已启用语音的助理等方案栩栩如生。 *用途&#xff1a;这个语音工具&#xff0c;不仅可…

【C语言初阶】C语言数组基础:从定义到遍历的全面指南

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言函数 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀数组 &#x1f4d2;1. 什么是数组…

HTTP状态码(HTTP Status Code)讲解

HTTP状态码&#xff08;HTTP Status Code&#xff09;是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由RFC 2616规范定义&#xff0c;并得到多个RFC规范的扩展。状态码告知客户端请求的处理结果及状态&#xff0c;有助于开发者定位和解决问题。 HTTP状态码分为…

HTTP请求与响应:Python爬虫技术解析

引言 在Web开发和数据抓取中&#xff0c;理解HTTP协议是至关重要的。HTTP&#xff08;超文本传输协议&#xff09;是用于从网络传输超文本到本地浏览器的标准协议。它定义了客户端与服务器之间请求和响应的格式。本文将从HTTP请求和响应的基本结构开始&#xff0c;逐步深入到如…

【C++】学习笔记——AVL树

文章目录 十六、AVL树1. AVL树的概念2. AVL树节点的定义3. AVL树的插入4. AVL树的旋转5. AVL树的验证6. 完整代码测试7. AVL树的性能 未完待续 十六、AVL树 1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&…

【机器学习】无监督学习和自监督学习

1. 什么是机器学习 机器学习是一种使计算机系统能够从数据中学习并做出预测或决策的技术和科学领域。它不需要显式地编程来执行特定任务&#xff0c;而是通过使用算法来分析数据和识别模式&#xff0c;以此“学习”如何做出准确的预测或决策。 以下是机器学习的几个关键点&…

【JS逆向课件:第七课:模块与包】

模块与包 模块 模块介绍 在计算机程序的开发过程中&#xff0c;随着程序代码越写越多&#xff0c;在一个文件里代码就会越来越长&#xff0c;越来越不容易维护。 为了编写可维护的代码&#xff0c;我们把很多函数分组&#xff0c;分别放到不同的文件里&#xff0c;这样&…

前端基础之JavaScript学习——函数的使用

大家好我是来自CSDN的前端寄术区博主PleaSure乐事&#xff0c;今天我们继续有关JavaScript的学习&#xff0c;使用的编译器为vscode&#xff0c;浏览器为谷歌浏览器。 函数的声明与使用 声明 在JavaScript当中函数的声明和其他语言类似&#xff0c;使用如下格式即可声明&…

实战篇(十):使用Processing创建可爱花朵:实现随机位置、大小和颜色的花朵

使用Processing创建可爱花朵 0.效果预览1. 引言2. 设置Processing环境3. 创建花朵类4. 实现花瓣绘制5. 绘制可爱的笑脸6. 鼠标点击生成花朵7. 完整代码8. 总结与扩展0.效果预览 在本教程中,我们将使用Processing编程语言来创建一个可爱的花朵生成器。通过封装花朵为一个类,并…

大语言模型-检索测评指标

1. MRR &#xff08;Mean Reciprocal Rank&#xff09;平均倒数排名&#xff1a; 衡量检索结果排序质量的指标。 计算方式&#xff1a; 对于每个查询&#xff0c;计算被正确检索的文档的最高排名的倒数的平均值&#xff0c;再对所有查询的平均值取均值。 意义&#xff1a; 衡量…

Context使用

Context API 是 React 提供的一种用于跨组件层级共享数据的方法&#xff0c;它可以用来实现兄弟组件之间的通信。通常情况下&#xff0c;兄弟组件之间的通信需要通过它们的共同父组件来实现&#xff0c;而 Context API 则可以帮助我们避免将数据逐层传递到每一个中间组件。 实…

京准:GPS北斗卫星授时信号安全隔离防护装置

京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 京准&#xff1a;GPS北斗卫星授时信号安全隔离防护装置 1、主要特点 ★信号加固功能&#xff1a; GPS/BDS单系统信号拒止情况下&#xff08;包含受到GPS L1欺骗干扰、GPS L1压制干扰、BDS B1欺骗干扰、BDS B1压制干扰&…

【C++】类和对象(下):初始化列表、类型转换、友元

目录 一.初始化列表 二.类型转换 三.static成员 四.友元 五.内部类 六.匿名对象 一.初始化列表 之前在实现构造函数的时候&#xff0c;初始化成员变量主要是使用函数体内赋值的方法&#xff0c;构造函数初始化还有另外一种方式&#xff1a;初始化列表。使用方式是以一个…

【STM32】按键控制LED光敏传感器控制蜂鸣器(江科大)

一、按键控制LED LED.c #include "stm32f10x.h" // Device header/*** 函 数&#xff1a;LED初始化* 参 数&#xff1a;无* 返 回 值&#xff1a;无*/ void LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENAB…

C语言习题~day32

请问该程序的输出是多少&#xff08;&#xff09; #include<stdio.h> int main(){ unsigned char i 7; int j 0; for(;i > 0;i - 3){ j; } printf("%d\n", j); return 0; }A.2 B.死循环 C.173 D.172 无符号字符型的取值范围是 0 到 255。 第一次循环…

199.二叉树的右视图(DFS)

给定一个二叉树的根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: [] 解题…

Flutter 中的基本数据类型:num、int 和 double

在 Dart 编程语言中&#xff0c;数值类型的基础是 num&#xff0c;而 int 和 double 则是 num 的子类型。在开发 Flutter 应用时&#xff0c;理解这三者的区别和使用场景是非常重要的。本文将详细介绍 num、int 和 double 的定义及其使用区别。 num num 是 Dart 中的数值类型…

实战:springboot用LocalDateTime快速替换Date

概叙 实战&#xff1a;早点用JDK8中的java.time来替换java.util.Date-CSDN博客 在Spring Boot项目中大家从Date升级到LocalDateTime最关心以下两个问题&#xff1a; 使用LocalDateTime类型字段作为接口出入参数&#xff0c;能正常映射转换前端传入的参数吗&#xff1f;返回参…

贪心算法总结(1)

一、贪心算法简介 常用方法&#xff1a;交换论证法、数学归纳法、反证法、分类讨论 二、柠檬水找零&#xff08;交换论证法&#xff09; . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool lemonadeChange(vector<int>& bills) {int five0,t…

【考研数学】线代满分经验分享+备考复盘

我一战二战复习都听了李永乐的线代课&#xff0c;二战的时候只听了一遍强化&#xff0c;个人感觉没有很乱&#xff0c;永乐大帝的课逻辑还是很清晰的。 以下是我听向量这一章后根据听课内容和讲义例题总结的部分思维导图&#xff0c;永乐大帝讲课的时候也会特意点到线代前后联…