• time_qiao
    2018-06-21
    刘老师看完这节,觉得您的linux功底实在太深厚了,这个系列做完能不能做个linux系列的
     1
     153
  • Jealone
    2018-06-15
    Epoll和IOCP还是有本质区别的,IOCP是封装了IO操作的,而epoll只是一个事件通知机制,意味着IOCP的IO操作也可以由内核完成,因此IOCP算异步IO,而基于epoll的仍然是同步IO,于IOCP相对应的不是epoll而是AIO
    
     50
  • 白杨
    2018-06-27
    我个人觉得还可以讲的更本质一些。
    不论是同步还是异步,阻塞还是非阻塞,都是用某种方法创建了某种结构,而不同的是,是谁在执行内部的方法,是谁写了标志,是谁触发了事件,是谁在操作io,是谁在等待,是谁在返回。
    换句话说就是,本来我在做的事情,让你来做吧,本来你在做的事情,让我来做吧。
    
     35
  • 零一
    2018-06-15
    第一个问题,windows 上是 iocp,如果想跨平台,要么使用兼容性较好的 select,要么对不同的平台使用不同的调用,kqueue iocp等。
    第二个问题,HTTP 是构建在 tcp 协议之上的,用 telnet 可以轻松构造一个 HTTP 请求
    
     29
  • 自然而然
    2018-07-21
    这篇写的很棒,很见功底
    
     11
  • 明子
    2019-01-09
    这章看的很吃力,可能限于篇幅原因,很多细节都没讲清楚。比如,说需要两个socket(监听socket和已连接socket),但没有说为什么需要两个socket,我去查了《Unix 网络编程》才了解原因;而且需要说明的是,只有服务端需要两个socket。

    作者回复: 只讲了模式,细节足够一本书了

     1
     8
  • 幻想
    2018-06-15
    真心写的好。多谢作者。
    
     8
  • caohuan
    2019-01-22
    听二遍 才懂了一点,通讯里面 确实 内容丰富、技巧很多、设计巧妙。

    本篇所得:1.一台机器有多个网卡,可以选择一个或多个网卡,发送和接受包资源;
    TCP连接数量=客户端的IP数*客户端的端口数,客户端的最大ip为2**32,客户端的端口数最大为 2**16
    ,所以TCP连接总数最大为2**48;

    2.Socket可以包括 监听Socket和已连接Socket;

    3.TCP的Socket连接 核心为:客户端的connect--服务端的accept---客户端的write---服务端的read---服务端的write----客户端的read;
    UDP的Socket连接 内容主要为:客户端send to---服务端recvform---服务端sendto--客户端的recvfrom。

    4.一个服务器可以连接有很多客户端进行通讯:(1)多进程,一个进程一个通讯项目;(2)多线程,一个进程对应对个项目,一个线程负责一个通讯项目;(3)多线程,一个线程负责多个通讯项目,使用轮询监听和描述 通讯的记录;(4)多线程,一个线程负责多个通讯项目,使用 注册 主动通知的方法,使用epoll解决C10k问题。

    回答老师的问题:问题1 linux有epoll,window有类似IOCP,跨平台就不清楚;问题二 http使用tcp协议,使用talnet规则构建。
    展开
    
     6
  • 大光头
    2018-06-15
    windows上有一个叫iocp,但是它还是有点不一样,它是proactor,而epoll是reactor。我觉得iocp效率会更高,epoll通知应用去读取数据,处理完之后还要返回内核发送数据,而完成端口直接在内核态进行处理数据,最后告诉应用,数据已经处理完了。
    
     6
  • Hugo
    2018-06-25
    老师监听的socket和已连接的socket 是每次连接两个都会创建 。
    还是监听的socket只创建一次
    每次都创建已连接的socket?
    
     5
  • 灵魂胖子
    2018-06-21
    老师,那个UDP 协议的 Socket 程序函数调用过程中的客户端可以不用调用bind()吧?

    作者回复: 可以

    
     5
  • 灰灰
    2018-06-19
    老师,对socket这块一直理解比较抽象,什么情况下需要socket编程,我印象中从来没写过。盼复

    作者回复: 很多地方啊,可能都是框架做好了,但是看框架的源代码,还是能看到的

    
     5
  • 星文友
    2018-06-16
    select由文件描述fd_set限制
    epoll 由文件描述符数量限制
    两个差异很大吗

    作者回复: 大,文件描述符更大,fdset小的多

    
     5
  • 咖啡猫口里的咖啡猫�...
    2019-02-26
    看完tcp/ip三卷 结合linux操作,再看一遍文章,刚觉老师 linux内核功力深厚。感觉书第二卷实现跟现在内核版本有些😂区别
    
     4
  • 扬~
    2018-11-02
    UDP的socket的调用过程中,为什么没有listen呢,要不应用程序怎么监听此端口?要不怎么把UDP的包发往监听此端口的应用程序呢?基于UDP的方式会不会因为连接数过多,造成服务器处理压力增大从而延迟增高呢?因为他们共用一个端口,而不是像TCP那样会复制一个套接字随机分配一个端口用于数据接受和发送。我不知道我说的对不对,希望老师能够解答一下困惑。

    作者回复: udp没有状态,所以不存在监听这个状态,内存里没有保存连接的任何信息,不占用资源,所以不存在连接数过多的压力,顶多是把网卡打满

    
     4
  • 汪木木
    2018-07-20
    这就是几种网络io的由来,bio,nio1,nio2。
    
     4
  • fumeck.com🍋🌴s...
    2018-06-15
    每天上班路上阅读,很充实,对于菜鸟的我收益颇多
    
     4
  • 起风了001
    2019-05-21
    之前有专门学过epoll, 然后就特地看了一下socket和tcp连接的关系, 所以这一章看得比较清晰明白.哈哈, 技术真的是多学就能融会贯通的, 不过本章老师说的主要是linux C编程上的, 现在我用的golang写的话, 很多细节都被隐藏了, 不需要使用epoll, 直接Listen(), 然后Accept() , 有新的连接过来的话就会返回一个Conn, 然后使用golang的goroutine就可以开启一个协程处理这个连接, 一个程序可以开100万个都没压力, 所以也就没有epoll这样的概念了.

    作者回复: golang好东西

    
     3
  • 传说中的成大大
    2019-03-06
    这篇文章,最突出的一点就是竟然把linux的epoll讲解的这么简单明了,windows下是用iocp完成端口!
    
     3
  • Observer
    2019-02-13
    还的继续啃 Unix 网络编程

    作者回复: 对的,这是好书

    
     3
我们在线,来聊聊吧