一、TCP连接
1 三次握手
2 四次挥手
3 长连接和短连接
短连接的操作步骤是:
建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
长连接的操作步骤是:
建立连接——数据传输…(保持连接)…数据传输——关闭连接
正常来说,TCP连接建立后,只要不主动释放,连接会一直存在,所以为了避免无用连接占用资源导致客户端无法建立新连接,就需要保活机制,保活机制在传输层和应用层都有实现。短连接每次交互后会主动释放连接,不需要保活。
二、tcp keep-alive
传输层保活机制
tcp具有保活功能,当tcp服务端回复之后会开启保活定时器,时间一到就会发送探测报文,重复多次后没有得到响应,则关闭连接。这个功能不是tcp的,而是内核支持的。
三、应用层保活机制
以netty举例,通过IdleStateHandler来保活。
1 client
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
// send heartbeat when read idle.
if (evt instanceof IdleStateEvent) {
try {
NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler);
if (logger.isDebugEnabled()) {
logger.debug("IdleStateEvent triggered, send heartbeat to channel " + channel);
}
Request req