Java Web: 对于长耗时请求, 客户端请求超时后, 服务器端依然在运行, 寻求解决方案?

54_键盘上的幽灵 发布于 2017/10/17 08:57
阅读 8K+
收藏 0

最近遇到一个难以解决的问题, java 服务器端, 某个接口处理时间超过20分钟, 但是客户端请求响应超时为2分钟, 这样就会导致, 在请求这个接口的时候, 页面显示响应超时, 但是服务器端依然在进行这个请求的后续操作, 严重浪费服务器的资源. 而且, 当用户看到请求超时后, 会重新发送此请求, 以此造成恶性循环, 最终导致此接口响应时间越来越长, 服务器资源耗尽而瘫痪.  因此, 想咨询一下java web 有没有机制, 当请求超时时, 将服务器端目前有的进程结束, 或者更优雅的解决方案?

加载中
2
红薯官方
红薯官方

业务做异步处理。

提交作业、查询作业。

客户端先查询作业,返回作业状态,已完成则读取处理的结果显示,未完成则提示正在处理的进度。

 

红薯官方
红薯官方
回复 @54_键盘上的幽灵 : 哈哈,你看Git 仓库 的Fork 是不是有点相似,它就会自动刷新,应该也是异步处理的。
54_键盘上的幽灵
54_键盘上的幽灵
多谢了
红薯官方
红薯官方
页面可以定时去查询作业的状态,比如5S Ajax请求查询一次。这样用户就不需要手动刷新。
0
Bug-猎人
Bug-猎人

服务器端设置一个超时时间就行了,超时抛异常,扔掉。

Bug-猎人
Bug-猎人
回复 @54_键盘上的幽灵 : 进服务器端的时候可以让它睡一会,睡醒了还在执行 直接线程关掉。
54_键盘上的幽灵
54_键盘上的幽灵
我用的springmvc释放的接口, 请问如何限制服务器端接口响应时间呢?
0
polly
polly
优化才是正解,即便你杀死他,他也没什么用,找找什么条件触发这么久还没结束
polly
polly
回复 @54_键盘上的幽灵 : 思考一下业务流程,对于第三方操作能否改造为异步执行
polly
polly
回复 @54_键盘上的幽灵 : 那一切正常处理时间时处理时间会是多久?能否分析出什么条件下才会耗时?从这个耗时的地方再下手。 如果是调用第三方,比如http,在http处加超时控制
54_键盘上的幽灵
54_键盘上的幽灵
这个优化也很难优化, 会调用一些第三方接口, 然后做一些逻辑处理, 已经做了多线程优化了
0
Class_one
Class_one

楼上正解

0
maradona
maradona

既然这个请求要执行这么长时间,那就异步处理啊,在结果未出来时不允许再次请求

0
苦苦奋斗的渣渣

异步  回调客户端

苦苦奋斗的渣渣
从业务逻辑上进行优化 ,看是不是能提前进行分析,将结果保存,
54_键盘上的幽灵
54_键盘上的幽灵
异步回调客户端, 应该用什么技术实现呢?
0
哈哈2725458
哈哈2725458

什么操作要20分钟  这么长的反应速度  能弄成实时的    不能优化的话   建议换种方式显示吧   

哈哈2725458
哈哈2725458
回复 @54_键盘上的幽灵 : 如果是第三方接口反映慢的话(那你们确实没办法),但是时间太长不能弄成实时的,可以分成2步,先申请数据,后台去查询 ,数据查回后再给用户看 ,这个要看你们的业务需求了 哈哈
54_键盘上的幽灵
54_键盘上的幽灵
此接口会用多线程去掉多个第三方接口, 数据量也比较大, 多线程跑完之后, 会对数据进行合并分析
0
偽coder
偽coder

按你的说法,数据量大而且要进行数据合并,你们从第三方接口调来的数据会自己进行存储么?还是说直接在程序里进行合并,如果直接在程序里进行合并,数据量大的话,会内存溢出吧?

0
ManderSF
ManderSF

疏优于堵,为什么不拆分业务   将一些 比如日志 比如不需要实时展示的东西  做成消息队列

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部