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

相关推荐
养生技术人4 分钟前
Oracle OCP认证考试题目详解082系列第5题
运维·数据库·sql·oracle·开闭原则
原来是猿36 分钟前
VS Code Remote-SSH 连接失败:提示过程试图写入的管道不存在
linux·服务器·ssh
坚持就完事了1 小时前
Linux中的权限信息
linux·运维·服务器
殷紫川1 小时前
告别手动部署噩梦:CI/CD 持续交付全链路实战
运维·架构·自动化运维
顶点多余1 小时前
进程间通信 --- 共享内存篇(通信速度最快)
linux·服务器·jvm
co_wait2 小时前
【c 语言】linux下gcc编译工具的使用
linux·c语言·开发语言
liulilittle2 小时前
LINUX RING BUFFER TUN/TAP 1
linux·服务器·网络·c++·信息与通信·通信
supersolon2 小时前
WSL2(Linux)升级docker
linux·运维·docker·wsl·升级
人工干智能2 小时前
用AI写Fusion 360脚本:个人版也能免费玩自动化
运维·人工智能·自动化·fusion
赛博云推-Twitter热门霸屏工具2 小时前
社交媒体自动化营销趋势分析:未来3年怎么玩(2026-2029)
运维·自动化·媒体