返回信息流前端经常会中断请求,比如查询数据请求。这个时候后端再继续处理也没有意义了。不知道在并发量很高的时候,这算不算一个优化点呢?如果是的话,不知道最佳实践是什么。有经验的大佬谈谈吧。
这是一条镜像帖。来源:北邮人论坛 / java / #64744同步于 2020/11/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
后端有没有必要支持中断处理
luluxiu
2020/11/16镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
先不考虑高并发。不知道我说清楚了没有。前端发了一个查询数据的请求,然后比如关了网页,但是后端已经收到请求了,于是开始处理。但是已经毫无意义了。我想要停止后端的这个处理。
【 在 xuanyu66 的大作中提到: 】
: 这是限流、熔断等降级操作吧吧
: 中断我还以为系统中断
: --
: ............
我不知道中断线程池中的某一个任务执行是否有意义,但是
中断通常用于停止 blocking 操作,而你的后台进程不仅仅运行 blocking 程序,因此可能完全不响应中断。
一个更优雅的方式可能是采用 volatile boolean isRunning 变量的方式来控制线程的运行。
首先,这个查询请求应该是一个耗时几秒以上的请求,不然人还没点就已经返回了,没啥意义。
其次这个操作必须挺耗费资源的,不然有什么意义
再则还必须是可中断的。
感觉这种操作只有在某些特定场景可能有作用,但是我还没想出来场景在哪【 在 luluxiu 的大作中提到: 】
: 先不考虑高并发。不知道我说清楚了没有。前端发了一个查询数据的请求,然后比如关了网页,但是后端已经收到请求了,于是开始处理。但是已经毫无意义了。我想要停止后端的这个处理。
然而对方“关闭网页”并不会发消息给你,即你并不能判断是否要“中断”查询。
说到后端接口开发,以前高并发Java代码遇到过报错,查了错误相关说明,是请求方已关闭,但低负载情况下无法复现,高负债时也是小概率出现,最后实在没法子,就整了个捕获,不了了之。
我有空的时候更新一下帖子。讨论范围可以缩到spring mvc, tomcat. 为什么我想要后端取消运行,是因为比如说,公司用的数据库,它每次读写都是收费的。这样的话,取消后台的处理就省了一笔钱