首先提出一个问题,我们为什么需要空闲断开?
对于服务端而言,由于连接数和内存的限制,我们不可能对一个长时间处于不活跃的客户端,单独维护一个fd,一个进程/线程始终为其服务,fd单个进程上限默认值为1024,由于内存的限制,也不能无限制的分配出进程或者线程为其服务,这个时候我们就需要断开在规定时间内没有任何动作的客户端,腾出内存为其他客户端服务。
第二个问题,我们要基于什么实现空闲断开呢?
我们可以先设想需要一个可以在一定时间后能唤醒一个断开的服务的东西,而不是我们去维护一个进程,负责更新时间和断开(这样代价太大)。
然后就想到了信号,设置一个定时的信号。
等等,在设置一个定时信号的时候,我们是不是在该考虑一个问题,假设我们服务一个终端的ftp客户端,恰巧它开始下载一个非常大的文件,恰巧下载时间超过了服务端设置的空闲断开时间,这个时候就尴尬了,按照之前的想法,我们会空闲断开(注意:终端的ftp客户端下载时候,不可以发送其他命令,当然ctrl +c 的 abort除外)。
所以我们就需要先定义一个data_process,如果在进行数据传输的时候,就设置data_process为true,安装信号的时候,检测到data_process就不再安装限时信号。
<!-- more -->
第三个问题,如何实现呢?
首先,我们需要现在session中,安装d