基于muduo实现了一个高性能webserver。
并且自定义循环缓冲区实现时间轮以定时踢掉不活跃的Tcp连接。
欢迎star
时间轮的作用:
时间轮的作用是为了定时踢掉超时的TCP连接,所谓超时的TCP连接指的双方长时间没有通信的连接。由于这些超时连接没有通信,依然占用服务器资源,所以需要清理掉。服务器和客户端长时间不通信的两种情况如下:一种是连接正常,只是单纯不需要通信,这个不多讲,另一种是客户端出现意外,下面讲这种情况: 由于muduo不会主动关闭连接,都是等待客户端关闭后再关闭服务端(即使主动关闭也是先关闭自己的写端,等客户端关闭后,在关闭自己的读端,之所以这样做是为了服务器不会漏收对方消息,这里不展开说明),如果客户端意外断电关机,那么服务端就无法受到FIN,进而无法关闭连接,此时,如果应用层没有实现心跳机制、也没有为该连接的fd设置 SO_KEEPALIVE
,该连接就会一直占用服务器资源。 为了避免上述无效连接浪费服务器资源,要么设置 SO_KEEPALIVE
,要么应用层实现心跳机制。如果是 实现心跳机制,就需要定时器实现的时间轮,用于以便定时清理无效连接 。