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

相关推荐
长弓聊编程15 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.22 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
梅见十柒1 小时前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热1 小时前
路由基础(全)
linux·网络·网络协议·安全
传而习乎1 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary1 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教2 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes