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 不读了

相关推荐
小米里的大麦1 小时前
022 基础 IO —— 文件
linux
Xの哲學1 小时前
Perf使用详解
linux·网络·网络协议·算法·架构
门前灯1 小时前
Linux系统之iprconfig 命令详解
linux·运维·服务器·iprconfig
tb_first2 小时前
k8sday09
linux·云原生·容器·kubernetes
忧郁的橙子.2 小时前
三、k8s 1.29 之 安装2
linux·运维·服务器
huangyuchi.2 小时前
【Linux系统】动静态库的制作
linux·运维·服务器·动态库·静态库·库的简单制作
闻不多2 小时前
用llamaindex搭建GAR遇到400
android·运维·服务器
jim写博客3 小时前
Linux进程概念(四)环境地址变量
linux·运维·服务器
是小崔啊3 小时前
【Jenkins】01 - Jenkins安装
运维·jenkins
稚辉君.MCA_P8_Java3 小时前
豆包 Java的23种设计模式
java·linux·jvm·设计模式·kubernetes