• 传说中的成大大
    2019-10-25
    第二个问题 才是把我考到了 我感觉现在我对设计模式的理解并不深,但是我现在感受特深的一点就是单一职责原理 buffer类才套接字的处理 tcpconnect应用层面的处理,而且最近在工作中我也是尝试着画流程图 把每个功能进行细分 分到一个流程分支里面只处理一个逻辑
    
     1
  • 不诉离殇
    2020-01-04
    老师好,parse_http_request函数没太看懂,while循环中如果数据没收全,这个函数不会返回,那么底层的handle_read函数也不会返回?那就没有机会再将数据写到input_buffer了呀?这样不是就卡住了?

    作者回复: 在什么情况下数据会收不全呢?一个http连接请求的head并没有多大,head部分的报文肯定是需要预先解析处理啊,才能往下处理。这里parse_http_request严格来说是parse_http_request_header

     1
    
  • 夏目
    2019-11-19
    希望老师加一个客户端请求到服务器响应的全过程流程图包括tcp连接和应用程序处理的流程😁

    作者回复: 大概是指哪个部分?因为客户端还是比较简单的,所以没有做这个。

    
    
  • chs
    2019-11-15
    老师不明白缓冲区为什么要这样设计。用两块内存当做缓冲区,一个用于接收数据,另一个用于发送数据。这两种方式的优缺点能说一下吗?

    作者回复: 这里你的理解有点问题,确实是两个buffer对象,一个input_buffer用来接收数据,这个input_buffer对象的写入是框架的handle_read函数来完成的,同时应用程序不端的将input_buffer里的数据取走,这样handle_read就可以不断的将接收缓冲区的数据写入input_buffer。

    另一个buffer对象是output_buffer,应用程序不断的往这个缓冲区里写入待发送的数据,框架里的handle_write函数不端的将缓冲区的数据送到套接字发送缓冲区中。

    缓冲区的设计中,肯定是有一个往缓冲区里写入的,另一个从缓冲区里读取数据,否则就没有缓冲区了,而是临时创建一个个的字节流对象。

    使用缓冲区可以大大减少对内存的消耗。

    
    
  • 刘晓林
    2019-11-03
    c语言写bbs网站的年代,真的是太疯狂了,一个一个字符的print(哭脸)

    作者回复: 是有点疯狂。(哭脸)

    
    
  • 沉淀的梦想
    2019-10-30
    在ubuntu系统上一运行老师的程序就会出现“interrupted by signal 11: SIGSEGV”错误

    作者回复: 我也是ubuntu系统啊,有同学碰到同样的问题么?

     1
    
  • tt
    2019-10-28
    嗯,对于第二个问题,因为我是从C++语言开始进入编程的,老师的C代码确实很多都是面向对象的。

    很多模块,比如tcp_connection,对应的头文件中声明的函数,第一个参数都是tcp_connection指针,这就相当于this指针。而相应的以"_new"结尾的函数就相当于C++中的构造函数。
    而结构体里的函数指针,我把它理解为了实现了继承C++中的虚拟基类或类似于java中实现了一个接口。

    画UML图的时候,完全可以用C++的术语进行。
    展开

    作者回复: 是的,面向对象写起来简洁许多

    
    
  • MoonGod
    2019-10-26
    如果发现当前 channel 没有注册 WRITE 事件,并且当前 tcp_connection 对应的发送缓冲无数据需要发送,就直接调用 write 函数将数据发送出去。
    老师好,这里没有理解,为啥不能做成无论有没有write事件都统一往发送缓冲区写呢,之后如果没有write事件,就再注册一个就好了不是?

    作者回复: 非常好的问题,我发到统一答疑部分了。感谢~

    
    
  • Steiner
    2019-10-25
    实在学不动了,我想抄袭老师的创意自己写一个框架,然后慢慢该吧
    (◦`~´◦)

    作者回复: 很好奇学不动的意思是啥

     1
    
  • 我来也
    2019-10-25
    老师的的c代码看上去是一种享受。
    逻辑很清晰,很佩服函数命名。

    以前我们缓冲区是用的循环,避免频繁的挪动数据,不过要处理好溢出的情况。

    文中好像拼错了单词。
    “只需要看到 http_request 和 http_responsde 结构。”
    “创建了一个 buffe 对象”
    展开

    编辑回复: 您好,文章已进行改正,谢谢反馈。

    
    
我们在线,来聊聊吧