socket, TCP, select,epoll,Reactor模式

1.TCP流程:

  服务端:                 客户端:

      创建socket---create_socket          创建socket

      绑定ip和端口 -- bind                  

      开启监听---listen  

                           调用connect 尝试连接服务器

      监听后,调用accept()与客户端

      send  / recv     收发数据                send  / recv     收发数据 

      结束时close()              close()

2. send和recv,相当于write 和read,其实是内核缓冲区和应用缓冲区之间交互,socket默认是阻塞模式,则会导致send、recv阻塞;

 返回值:  等于n(n>0)                        发送或接受n个字节数据,有可能还未结束

       等于0           对端关闭连接

       小于0           出错,信号中断,TCP窗口太小发不出(send),或者网卡缓冲区无数据可收(recv)

3. select 函数 检测一个或多个socket中是否有事件就绪;

      读事件就绪;网卡缓冲区数据内大于等于低水位;连接关闭成功;

      写事件就绪;发送缓冲区数据大于等于低水位;

      异常事件就绪;

·   int   select (int nfds, fd_set*readfds, fd_set*writefds,fd_set*exceptfds, struct timeval *timeout);

   缺点:需要每次从用户态到内核态拷贝,并且每次在内核要遍历事件集合,数量限制1024;

4. epoll  相比于select,没有数量限制,并且不需要遍历,epoll_wait通过event参数拿到所有就绪事件的fd,直接处理即可;

5.Reactor模式: 多路复用模型;

    资源请求事件,注册处理;

    多路复用器与事件分离器;select,poll,epoll检测是否有事件

    事件处理器;

  exp:几个服务员处理爆满的餐厅顾客;

socket, TCP, select,epoll,Reactor模式

上一篇:接口测试:接口常见bug分类


下一篇:hutool工具