一点感悟
今天TL的人跟我聊了下fastcgi协议的事情,问我客户端(指fastcgi的客户端)在发出请求得到回应后,是否关闭close, 我说关闭,然后那人问我fastcgi和cgi有什么区别,我说cgi处理完请求后,会被杀死(web服务器), fastcgi在处理完请求后,不会被杀死(当服务N个请求会,会被杀死,但会重新fork),然后那个人接着问 那客户端主动 关闭了,fastcgi的优势还有吗?当时有点被绕进去的感觉了,回来后,仔细想了想,又查了资料, fastcgi客户端主动close 并不会导致 fastcgi 在服务器上的进程被杀死啊!! 客户端执行close(fd),在四次挥手后,服务器端也会close(fd) 这个fd是针对这个客户端产生的fd(文件描述符),回收,以便提供给其他客户端使用,服务器端不close(fd)不就成了长链接了,在web这么频繁的请求下,肯定是不能用长连接的啊,内核我确实很少看,当问到数据到到达服务器的网卡后,怎么通知内核,我想下 说是中断,他说中断分开中断,和关中断,你说的这个中断属于哪种?我确实不知道了,内核这块他确实挺在行,佩服佩服!
说起半连接和全连接,他说半连接是什么 ,我说客户端发送带有SYN的数据包,进入服务器后,在半连接队列里根据 key为 hash(客户端ip,客户端port)查找,如果没有,就insert 进去,同时服务器端发送ack的响应包,客户端收到后,再发送一个ack,这时在半连接里找到了,然后移植到全连接里(握手成功了),这里再通知accept,去全连接里取相应数据,他说没有半连接,你在哪里看到的,博客还是自已看的源码,我说博客,其实源码(博客里别人复制的)我了简单看过,但印象不深,怕说出来后,又问我你看的是内核几点几的,我肯定没注意,让他觉得我在欺骗他,然后他说博客上的知识点不见得对,还得看源码,其实有点印象的是内核在2.8还是多少之后,确实没有了半连接了,但版本号我确实记不清了,好吧,光这个块讨论了有半个小时,看来以后有时间,还得自己翻翻源代码