关于http请求卡死的处理
来源:互联网 发布:安装战网出错网络问题 编辑:程序博客网 时间:2024/06/11 23:03
大家在做http请求时可能会遇到这种情况,明明设置了connetTimeOut和SocketTimeOut可是在实际使用的过程中却还是无法在设置的时间内得到响应结果(正确的或者异常的),请求就一直处于卡死状态,这种情况在手机端会比较常见(特别是网络环境不佳的时候),具体原因暂时不知,但我们可以对这种情况做下处理,这样不至于导致app处于一直等待的卡死状态。使用FutureTask对请求做定时处理,在限定时间内返回返回结果,不管http请求是否完成。一般我们可以把FutureTask的时间限定的长一些,一般足以让http请求正常返回就行。下面上代码
public static HttpResult proc(HttpClient client, HttpUriRequest req, Charset charset, int count) throws Exception{ExecutorService executor = Executors.newSingleThreadExecutor(); FutureTask<HttpResponse> futureTask = new FutureTask<HttpResponse>(new Callable<HttpResponse>() {// 使用Callable接口作为构造参数public HttpResponse call() {HttpResponse response = null;try {response = client.execute(req);} catch (Exception e) {}return response;}});executor.execute(futureTask); HttpResponse response = null;try {// 这里是限定2分钟内response = futureTask.get(120000, TimeUnit.MILLISECONDS);} catch (TimeoutException e) {futureTask.cancel(true);} finally {executor.shutdown();}if(response == null) {return new HttpResult(response, req);}if (response.getStatusLine().getStatusCode() == 302 || response.getStatusLine().getStatusCode() == 301){Header header = response.getFirstHeader("Location");if (header != null){String location = header.getValue();System.out.println("location:" + location);HttpGet get = new HttpGet(location);return proc(client, get, StandardCharsets.UTF_8, count);}return new HttpResult(response, req, charset);}HttpResult rh = new HttpResult(response, req, charset);return rh;}
阅读全文
0 0
- 关于http请求卡死的处理
- yii2关于HTTP请求处理的总结
- 关于 eclipse启动卡死的问题处理
- Nginx的HTTP请求处理
- MFC 的 HTTP 请求处理
- http,https请求的处理
- 关于死链接的处理方法
- 关于HTTP请求的论述
- 关于spring boot 内嵌tomcat 在window上启动,处理请求卡死---阿里云服务器有瑕疵
- 关于servlet处理http请求和响应原理的前序和思考
- 关于Http实时请求重复处理的问题请教和讨论
- 使用java模拟http请求时关于特殊字符的处理+
- 服务器端技术----Http请求的处理过程
- Scoket模拟HTTP请求响应的处理
- Handler处理HTTP请求的封装
- Apache处理http请求的生命周期
- 用于处理HTTP请求的工具类
- MFC 处理 HTTP 请求的基本方法
- UML 常见图结构
- 内存溢出和内存泄漏的区别
- 音视频的同步原理——老文章,比较清晰
- laravel--事件
- IO流总结
- 关于http请求卡死的处理
- Mybatis动态sql条件查询中if判断Integer的条件写法
- 人脸识别的过程和算法
- 将MATLAB程序打包为jar文件的时候遇到的问题
- Java中组合与聚合的区别
- VScode调试python 程序报错'python.python-debug.startSession' not found
- javascript:用户与浏览器交互
- 如何加载带中文路径的图片???
- html总结