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边沿触发

    c 复制代码
    event_register(clientfd, EPOLLIN | EPOLLET);

    bufferlength = 10 改小buffer 明显一点

    改recv_cb

    c 复制代码
    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 不读了

相关推荐
utf8mb4安全女神11 分钟前
Linux网络服务
linux·运维·服务器
vortex529 分钟前
Linux PAM 配置详解:从原理到实战,彻底阻断非授权提权
java·linux·服务器
ZPC821032 分钟前
Linux Preempt-RT 实时内核 ** 抖动(Jitter)** 完整测试方法
linux·运维·服务器
2501_9200470334 分钟前
openclaw在ubuntu系统的安装
linux·运维·ubuntu·openclaw
呉師傅1 小时前
UPS滴滴告警!如何测量UPS电池内阻【UPS学习】
运维·服务器·网络·学习·电脑
一个人旅程~1 小时前
linux如何“抢”过windows的usb移动硬盘权限对0磁道损坏的移动硬盘进行尝试修复
linux·windows·经验分享·电脑
YL200404262 小时前
MySQL-运维篇-主从复制
运维·数据库·mysql
tedcloud1232 小时前
wifi-densepose部署教程:构建无线人体感知系统
服务器·javascript·网络·typescript·ocr
AC赳赳老秦2 小时前
OpenClaw碎片时间利用:设置轻量化自动化任务,高效利用职场碎片时间
java·大数据·运维·服务器·数据库·自动化·openclaw
sukioe2 小时前
Linux RPM 方式安装 MySQL 8.0
linux·mysql·adb