码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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 不读了

  • 相关阅读:
    upload-labs靶场通关指南(9-11关)
    MyBatis 查询数据库
    【Hive】内置函数—条件函数
    Oracle数据库更改账号密码,设置账号有效期
    设备的分配与回收(考虑因素,数据结构,分配步骤)
    Oracle EBS 导入日记账提示警告 GL_INTERFACE 错误代码ECW1,EC11
    Python使用turtle绘制简单图形-设置绝对坐标setpos(), 抬起画笔penup(),放下画笔pendown()
    【目标检测】Object Detection in 20 Years: A Survey
    JVM的GC算法CMS和G1
    优化Scrum敏捷需求管理流程,敏捷需求如何管理。
  • 原文地址:https://blog.csdn.net/weixin_44925529/article/details/139753680
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号