传统的servlet、sprimg mvc等基于http协议的web服务端程序大都采用阻塞式io,比如通过orm框架读写数据库,或者读写文件等,有时遇上耗时的操作,但用户想要中断这一次请求,是不太可能的,即使用户关闭前端页面,但后台已响应到该请求,所以无法取消这次处理(一旦阻塞在io操作中的话)。
如果遇到用户想取消这次长链接该怎么办呢?web服务是基于http协议的一种服务,而http又位于TCP/IP模型的顶端(应用层),是对传输层层的封装。
因此客户端关闭连接的本质就是关闭了客户端到服务端的TCP连接,可通过操作系统的netstat命令监控其连接状态。关于TCP连接的各种状态,如下图所示:
这里牵涉到关于TCP连接三次握手和四次挥手的一些知识,可参考此文:
https://blog.csdn.net/huangyuhuangyu/article/details/78220005
因此,为了在服务端检测到此次tcp连接是否已中断,可调用操作系统的netstat命令。笔者采用linux