Tomcat NIO(15)-长连接

本文深入探讨了Tomcat NIO中的长连接机制,包括决定长连接的因素,如HTTP协议版本、'Connection'请求头的值,以及maxKeepLiveRequest配置。同时,介绍了Tomcat如何通过超时检测来关闭无活动的长连接,确保系统的效率和稳定性。
摘要由CSDN通过智能技术生成

上一篇文章里我们主要介绍了 tomcat nio 中 block poller 线程的阻塞与唤醒,当 tomcat io 线程读取请求实体数据不可读或者写入响应数据不可写的时候,就会注册事件到 block poller 线程中,并阻塞当前线程。block poller 线程负责注册并监测可读可写到原始 socket ,当可读可写的时候唤醒阻塞的线程,让其继续处理读写事件。在这里我们主要介绍 tomcat 中的长连接。

tomcat 数据的读写都在 io 线程中,根据以前文章 io 线程序列图如下:

对于 SocketProcessor 类,决定是否保持长连接的核心代码如下:

// doRun() method logic in SocketProcessor
if (handshake == 0) {
    SocketState state = SocketState.OPEN;
    // Process the request from this socket
    if (event == null) {
        state = getHandler().process(socketWrapper, SocketEvent.OPEN_READ);
    } else {
        state = getHandler().process(socketWrapper, event);
    }
    if (state == SocketState.CLOSED) {
        poller.cancelledKey(key, socketWrapper);
    }
} else if (handshake == -1 ) {
    poller.cancelledKey(key, socketWrapper);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值