我需要为我们对服务(而非Web服务)发出的Http请求设置超时。我们正在使用Apache
HTTP客户端。我添加了这两行代码,以根据请求和对服务的响应设置超时时间。
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
1)目前,我已将超时设置为10秒,因为我几乎立即从服务中看到了响应。我应该增加还是减少时间?
2)如果响应时间超过10秒,会发生什么?它会抛出异常吗?它将是什么异常?我还需要添加其他内容来设置以下代码中的超时时间。
public HashMap<String, Object> getJSONData(String url) throw Exception{
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
HttpHost proxy = new HttpHost(getProxy(), getProxyPort());
ConnRouteParams.setDefaultProxy(params, proxy);
URI uri;
InputStream data = null;
try {
uri = new URI(url);
HttpGet method = new HttpGet(uri);
HttpResponse response = httpClient.execute(method);
data = response.getEntity().getContent();
}
catch (Exception e) {
e.printStackTrace();
}
Reader r = new InputStreamReader(data);
HashMap<String, Object> jsonObj = (HashMap<String, Object>) GenericJSONUtil.fromJson(r);
return jsonObj;
}
您将看到的例外是ConnectTimeoutException
和SocketTimeoutException
。您使用的实际超时值应该是应用程序愿意等待的最长时间。关于读取超时的一个重要说明是,它对应于套接字读取的超时。因此,这不是完全响应到达所允许的时间,而是单个套接字读取所给的时间。因此,如果有4个套接字读取,每个读取耗时9秒,那么您的总读取时间为9 * 4 = 36秒。
如果要指定响应到达的总时间(包括连接和总读取时间),则可以将调用包装在线程中,并为此使用线程超时。例如,我通常这样做:
Future<T> future = null;
future = pool.submit(new Callable<T>() {
public T call() {
return executeImpl(url);
}
});
try {
return future.get(10, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
log.warn("task interrupted", name);
}
catch (ExecutionException e) {
log.error(name + " execution exception", e);
}
catch (TimeoutException e) {
log.debug("future timed out", name);
}
上面代码中的一些假设是:1)这是在带有url参数的函数中,2)它在具有名称变量的类中,3)log是log4j实例,4)pool是某个线程池执行程序。请注意,即使您使用了线程超时,也应该在HttpClient上指定连接和套接字超时,以免慢速请求不会占用线程池中的资源。还要注意,我使用线程池,因为通常我在Web服务中使用线程池,因此线程池在许多tomcat线程之间共享。您的环境可能有所不同,您可能希望为每个调用简单地产生一个新线程。
另外,我通常会看到通过参数的成员函数设置的超时,如下所示:
params.setConnectionTimeout(10000);
params.setSoTimeout(10000);
但是也许您的语法也能正常工作(不确定)。
我的Java代码使用共享的ApacheHttpClient 4.4。1.我将每个POST请求级别上的连接超时、套接字超时和连接请求超时设置为100毫秒。它大部分时间都很好用。然而,在大量请求(压力测试)时,HttpClient忽略这些超时;请求可能需要20秒或更长时间。这是我的密码: 在某些情况下,我会得到如下日志记录: 2018-10-26 14:18:45496[my-thread-1]调试c
我正在使用feign创建一个REST客户端。我有我的电话工作,但我想添加一些超时支持,我有一段时间,弄清楚如何做到这一点。 Feign的文档中说:“要将Hystrix与Feign一起使用,请将Hystrix模块添加到类路径中,然后使用HystrixFeign构建器。”好了,现在我有了这个: 现在我的所有方法都在返回HystrixCommands,我可以执行或排队,但仍然看不到如何配置它们。 但是我
问题内容: 我在Go中制作了一个URL提取程序,并具有要提取的URL列表。我将请求发送到每个URL并获得他们的响应。 如何为每个Get请求设置自定义超时?(默认时间很长,这会使我的提取程序非常慢。)我希望提取程序的超时时间为40-45秒左右,之后它应该返回“请求超时”并移至下一个URL。 我该如何实现? 问题答案: 显然在Go 1.3中,http.Client具有“超时”字段 这为我完成了窍门。
我正在制作一个URL提取器,并有一个要提取的URL列表。我向每个URL发送请求并获取它们的响应。 如何为每个Get请求设置自定义超时?(默认时间很长,这使得我的取数器非常慢。)我希望我的提取器有一个大约40-45秒的超时,之后它应该返回“Request timed Out”并移动到下一个URL。 我怎样才能做到这一点呢?
在我的views.py中,我有一个函数,它每次使用不同的响应来调用各种requests.get() 在我的测试类中,我想做这样的事情,但无法计算出确切的方法调用 步骤1: 验证响应包含“a response”、“b response”、“c response” 如何完成步骤1(模拟请求模块)?
当您通过提交表单调用API请求时,如何设置Axios响应?我想从/在POST方法中发送表单,并获得API响应,然后用API响应重定向到/result页面。我的代码在下面,它引发 警告:无法对卸载的组件执行React状态更新。 这是一个no-op,但它表示应用程序中存在内存泄漏。 若要修复,请取消useEffect清理函数中的所有订阅和异步任务。在家(在app.js:21) 完成handleSubm