linux精通 4.1

2.1.3 http服务器实现

  1. 目的

    reactor应用——webserver webclient

    每次上课前 看大纲+down code

  2. 复习:

    在这里插入图片描述

    不行啊 编译给的代码报错啊 给的最新的不是0430那一版就不行啊

    reactor.c:(.text+0x254): relocation truncated to fit: R_X86_64_PC32 against symbol `begin' defined in COMMON section in /tmp/cctoLdtd.o
    

    你学会了吗 小朋友 😆 git 拉取某一次的版本 我好棒成功了

    git拉取历史提交的代码_git拉取某次提交的代码-CSDN博客

    一开始clone下来git clone .git

    在这里插入图片描述

    git log查看某一日期的commit git switch -c 名字创建一个分支branch

    git checkout 提交hash值切换到某一次提交

    在这里插入图片描述

    git switch main 又可以切回main分支

  3. 编译0427版本还是报错

    https://blog.csdn.net/www_helloworld_com/article/details/88964968

    gcc -mcmodel=medium -o reactor reactor.c 
    

    在这里插入图片描述

    成功啦 send以后返回接收的数据

水平 边沿触发

  1. 水平:只要有数据 没读完前一直触发

  2. 边沿:有数据只触发一次,不管读完没

    改accept cb里 默认水平lt,或一个epollet边沿触发

    event_register(clientfd, EPOLLIN | EPOLLET);
    

    bufferlength = 10 改小buffer 明显一点

    改recv_cb

    if 1里面printf("[%d] RECV: %s\n",  conn_list[fd].rlength, conn_list[fd].rbuffer);把这一行注释掉,accept事件以后只有recv,没有epollout 没有再次预设事件        
    // set_event(fd, EPOLLOUT, 0);
    

    效果

    ET边沿触发 只触发一次,一段段recv,配套while

    你妈喊你吃饭,一直喊喊道答应为止

    每次client send32 byte

    每次server 收buffer 10

    1串字符32byte 要四次,所以要按四次send servervscode里才收的完!!!!

    在这里插入图片描述

    LT水平触发——触发四次,不需要while 全自动

    你妈喊你吃饭直喊一次,全自动不再喊等到你来

    client网络助手里send一次,vscode的server端一次性跳出来4行,就是边沿要四次才能收到的数

    为什么有奇奇怪怪的结尾,因为没有memset清空

    何时用LT ET

    非阻塞IO用边沿触发,因为如果阻塞io,进入while会卡住,不recv了,所以非阻塞io用边沿触发好

    在这里插入图片描述

    **水平触发:适合包大小固定的,**多个client 连listenfd 然后server调用accept

    边沿:适合每个包大小不确定的,while加accept()直到accept(返回-1 不读了

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

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

相关文章

python 光伏相关packages

除了PVLIB之外,还有一些其他光伏(太阳能光伏)相关的Python包和工具。这些包提供了各种功能,从光伏系统建模和仿真到数据处理和可视化。以下是一些常见的光伏相关Python包: SolarPy: SolarPy 是一个专注于太阳能数据分析…

待学习记录清单

1、大模型相关的知识和周边知识,相关的论文阅读; 论文0:https://arxiv.org/abs/1706.03762 论文1:https://arxiv.org/pdf/2306.07962 论文2:https://arxiv.org/abs/2405.20323 2代码链接:https://github.co…

《QT实用小工具·七十一》基于Qt+Qml开发的文件传输工具

1、概述 源码放在文章末尾 该项目基于QTQML实现了文件传输的功能,可以在局域网环境下使用(热点),扫描使用UDP,传输使用TCP,每一个文件传输使用独立的线程进行处理,高效便捷。 开发环境 使用Qt/Qml开发 QT版本&#x…

(自用)关于程序的一些概念3:程序中的“选择“

前言 学习的基本过程有理解→总结→应用这几个步骤.总结的目的大概是概括出大体的一种思路,一些必然和必不然,整理出"概念",并以概念指导应用 引入 尝试做一些和编程有关的概念总结.为了满足那个很朴素的想法:总结出概念,编程的思路就水到渠成地来了.---就好像学了单…

Android --- 异步操作

同步和异步的差异 同步:在发生某件事后什么也不做,直到该事件完成后,再继续进行 异步:在某件事发生后,可以在等待他完成的时候去处理其他事件,等到该事件发生完成后,再回过头来处理它。 异步…

C#心跳机制服务器

控制台应用项目 Program.cs internal class Program {static Server server;static void Main(string[] args){Server server new Server(IPAddress.Any,3333);server.Start();// 除了服务器监听方法,监听客户连接的方法,扫描客户端是否在线的方法//如…

Linux服务器上激活conda环境conda: error: argument COMMAND: invalid choice: ‘activate‘

正常我们使用如下来流程: 创建环境:conda create -n 环境名称 激活环境:conda activate 环境名称 但是,在Linux服务器上,使用conda activate 环境名称,出现如上图所示的报错。conda: error: argument CO…

2.1 嵌入式八股文(三)

一、C中类成员的访问权限? C通过public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。在类的内部(定义类的代码内部)&#xff0c…

Excel 常用技巧(六)

Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…

CMSIS-RTOS2简介

本文介绍CMSIS-RTOS2。 1.引入 CMSIS-RTOS2在基于Arm Cortex处理器的设备上运行的实时操作系统内核上指定了通用RTOS接口。应用程序和中间件组件可以使用CMSIS-RTOS2 API在各种软件生态系统中实现更好的代码重用和更简单的集成。 CMSIS-RTOS2还指定了RTOS内核使用的标准OS T…

windows上安装redis,并且用pycharm联通调用测试

在 Windows 上启动 Redis,官网版本不支持windows直接安装,你可以按照以下步骤进行操作: 使用Github Redis 版本启动 Redis 如果你想使用 Redis 在 Windows 上启动 Redis,以下是基本的步骤: 下载 Redis: 访…

回溯算法2(c++)

棋盘问题 题目描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。 要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 k个棋子的所有可…

自定义starter并发布maven私服

一、搭建nexus私服 nexus就是maven的私有服务器&#xff0c;这个搭建教程可以在网络上找到很多&#xff0c;这里就不赘述了。搭建完成之后再进行下一步 二、本地maven的setting配置文件中配置nexus的用户名和密码 <servers><server><id>nexus-releases<…

索引在手,查询无忧:MySQL索引简介

在数据库的世界里&#xff0c;MySQL作为一款广泛使用的关系型数据库管理系统。在DB-Engines的2024年5月的数据库管理系统流行度排名中得分1084&#xff0c;仅次于老大哥Oracle&#xff0c;足以MySQL在全球数据库市场中占有重要地位&#xff0c;当然MySQL在2009年被Oracle公司收…

解决使用Jmeter进行测试时出现“302“,‘‘401“等用户未登录的问题

使用 JMeter 压力测试时解决登录问题的两种方法 在使用 JMeter 进行压力测试时&#xff0c;可能会遇程序存在安全验证&#xff0c;必须登录后才能对里面的具体方法进行测试&#xff1a; 如果遇到登录问题&#xff0c;通常是因为 JMeter 无法模拟用户的登录状态&#xff0c;导…

表单中的常用元素

10.图像形式上传文件 <input type“image”>定义图像形式的提交。 src 属性和alt属性必须与<input type“image””>结合使用。 input type"image"src"img/l.jpg"alt"submit"/> 11.下拉列表框 <select>标签定义下拉列表框…

JS中splice怎么使用

在JavaScript中&#xff0c;splice() 是一个数组方法&#xff0c;用于添加/删除项目&#xff0c;并返回被删除的项目。这个方法会改变原始数组。 splice() 方法的基本语法如下&#xff1a; array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) start&#xff08;必…

数据库管理-第205期 换个角度看23ai(20240617)

数据库管理205期 2024-06-17 数据库管理-第205期 换个角度看23ai&#xff08;20240617&#xff09;1 规范应用开发2 融合总结 数据库管理-第205期 换个角度看23ai&#xff08;20240617&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle ACE Pro…

数据库修复实例2(副本出入口修复)

修复目标 修复Bfa-5人副本出入口&#xff08;Bfa 为 WOW 争霸艾泽拉斯版本&#xff09; SET OGUID : 7000316; SET ATID : 69; SET ATCP : 56; SET ATIDSPAWN : 70; SET SPAWNGROUP : 1251; SET WORLDSAFELOCID : 100042;-- Adjust GameObjects DELETE FROM gameobject WHERE…

c# 根据空格分割字符串

在C#中,可以使用以下方法根据多个空格来分割字符串: 使用 Split() 方法: string input " Hello World How are you? "; string[] words input.Split(new[] { }, StringSplitOptions.RemoveEmptyEntries);// words 数组包含: ["Hello", &qu…