网络链接超时笔记
HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试,在这里记录下。
测试版本为HttpClient——3.1
一:连接超时:connectionTimeout
1:指的是连接一个url的连接等待时间。
2:设置方法为:
public class TestHttpClientMain {
/** * @param args */ public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod( "http://test.com"); client.getHttpConnectionManager().getParams() .setConnectionTimeout(3000); client.getHttpConnectionManager().getParams().setSoTimeout(3000); try { int statusCode = client.executeMethod(method); System.out.println(statusCode); byte[] responseBody = null; responseBody = method.getResponseBody(); String result = new String(responseBody); System.out.println(result); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3:测试的时候,将url改为一个不存在的url:“http://test.com”
4:超时时间3000ms过后,系统报出异常。
org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 3000 ms
at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:155) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125) at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
二:读取数据超时:soTimeout
1:指的是连接上一个url,获取response的返回等待时间
2:设置方法
public class TestHttpClientMain {
/** * @param args */ public static void main(String[] args) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod( "http://localhost:8080/firstTest.htm?method=test"); client.getHttpConnectionManager().getParams() .setConnectionTimeout(3000); client.getHttpConnectionManager().getParams().setSoTimeout(2000); try { int statusCode = client.executeMethod(method); System.out.println(statusCode); byte[] responseBody = null; responseBody = method.getResponseBody(); String result = new String(responseBody); System.out.println(result); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3:测试的时候的连接url为我本地开启的一个url,http://localhost:8080/firstTest.htm?method=test
在我这个测试url里,当访问到这个链接时,线程sleep一段时间,来模拟返回response超时。
@RequestMapping(params = "method=test") //<——②
public String testMethod(ModelMap model) { try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("call testMethod method."); model.addAttribute("name", "test method"); return "test"; }
4:将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常:
Java.NET.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
HttpClient 4 和 HttpClient 3 设置超时
HttpClient 4:
连接超时:
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 60000 );
// 或者 HttpConnectionParams.setConnectionTimeout(params, 6000 );
|
读取超时:
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000 );
// 或者 HttpConnectionParams.setSoTimeout(params, 60000 );
|
HttpClient 3:
连接超时:
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout( 60000 );
|
读取超时:
httpClient.getHttpConnectionManager().getParams().setSoTimeout( 60000 );
|
ok,以后再写httpClient这两个超时时间一定要加上,不加就很可能悲剧的了
注:转载于:http://blog.csdn.net/xinying0424/article/details/36006383
相关推荐
解决这个问题通常涉及调整超时设置、优化服务性能、检查网络连接或采用重试策略等。 描述中提到的“AXIS2”是Apache软件基金会的一个开源Web服务框架,它用于部署和实现Web服务。AXIS2提供了高效的执行模型,支持...
// 建立连接超时时间,单位为毫秒 context.put(BindingProviderProperties.REQUEST_TIMEOUT, 10000); // 获取响应超时时间,单位为毫秒 System.out.println("Response: " + response); } } 在Java中,Webservice...
"cxf超时设置"这个主题是关于如何在使用CXF框架时,对网络通信的超时时间进行配置,以优化服务的稳定性和性能。 首先,理解超时的概念至关重要。在计算机网络中,超时是指等待某个操作完成的时间限制。当这个时间...
SpringBoot 设置接口超时时间的方法 SpringBoot 是一个基于 Java 的开源框架,由 Pivotal 团队开发,旨在简化基于 Java 的企业级应用程序的开发。 在 SpringBoot 中,设置接口超时时间是非常重要的,因为它可以避免...
同时,也可以在IIS管理界面的"Default Web Site"中调整"Connection timeout",以改变连接超时时间。 总结起来,Webservice的远程调试和超时管理是确保服务稳定性和高效性的重要手段。正确配置这些参数,可以有效...
2. **超时时间**:根据实际网络情况调整`set_options()`中的超时时间,避免因网络问题导致的连接失败。 3. **编码问题**:确保所有操作都使用相同的字符集(例如UTF-8),以避免出现乱码或解码错误。 4. **错误处理*...
- 修改生成的代码以适应实际需求,如添加错误处理逻辑、设置超时时间等。 #### 五、调用服务 1. **初始化客户端对象**: - 使用生成的客户端类初始化客户端对象。 - 设置必要的参数,如服务地址、方法参数等。 ...
- 设置HTTP连接:创建HttpURLConnection实例,设置连接参数,如URL、请求方法、超时时间等。 - 发送请求:将SOAP请求写入HTTP连接的输出流。 - 处理响应:读取HTTP连接的输入流,解析返回的SOAP响应XML,提取所需...
1. **电子商务**:在用户完成购物后,通过Webservice接口发送订单确认短信,通知用户订单详情和预计送达时间。 2. **银行和金融**:当用户进行转账或支付操作时,通过短信提醒用户交易详情,增强安全性。 3. **教育...
- **`timeout`**:设置请求超时时间为 30 秒。 - **`SERVICE_IP`**:服务端 IP 地址及端口号。 - **`URL`**:服务的完整 URL。 - **`NAMESPACE`**:命名空间,用于区分不同服务。 - **`webserviceName`**:要调用的...
此外,性能优化也是调用Web Service时不可忽视的一环,例如,缓存重复请求的结果、批量处理请求、合理设置超时时间等。 文档在Web Service的使用中扮演着重要角色。"webservice调用终极解决方案.docx"很可能包含了...
5. **优化超时和重试**:设置合适的超时时间,防止服务器资源过度消耗,同时在超时后客户端自动重试请求,确保连接的连续性。 通过以上步骤,我们可以在 VS2005 中利用 AJAX 和 Webservice 实现基于长轮询的 Server...
- 性能优化:合理设置请求超时时间,避免不必要的网络等待,同时考虑缓存策略以减少重复请求。 总的来说,"WebService服务调用工具类"是一个实用的开发工具,它提高了开发效率,降低了网络请求的复杂性,使得开发者...
2. 配置Feign的客户端,包括超时时间、连接池大小等。 3. 当服务提供者不可用或网络问题导致请求失败时,可以通过Hystrix进行回退处理。 4. 可以通过日志配置来追踪Feign的请求和响应,便于排查问题。 总之,Spring...
可能需要调整gSOAP的配置选项,例如超时时间、重试策略等。 在"VC++使用gsoap调用webservice接口.rar"中,包含了示例程序,这将帮助你更好地理解实际操作流程。通过研究和运行这些示例,你可以快速掌握gSOAP在VC++ ...
此外,为了提供良好的用户体验,记得处理网络错误,比如无网络连接、超时或服务器错误等。还可以考虑使用缓存机制,当网络不稳定时,可以从本地加载之前查询过的数据。 总结一下,实现“Android调用WebService接口...
- 优化DNS解析:如果确认是DNS解析导致的延迟,可以使用DNS缓存服务或设置静态DNS条目来减少解析时间。 - 提高网络性能:确保网络带宽和连接质量能够满足web service的需求,特别是在高负载或远程连接的场景中。 -...
- **配置中心**:除了服务信息,还可以存储其他配置,如超时时间、重试次数等,便于集中管理和动态更新。 **3. WebService与Dubbo的结合** 传统的Web服务多采用SOAP协议,而Dubbo则基于更轻量级的RPC协议。不过,...
- 调整服务器配置,例如Tomcat的连接池大小、超时设置等,提升服务性能。 - 对返回的数据进行压缩,减少网络传输开销。 - 通过日志监控,定位可能出现的问题。 7. **总结** WebService测试调用工具,如...
可能需要设置超时时间和其他HTTP头: ```java HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); androidHttpTransport.debug = true; // 开启调试模式,以便查看发送和接收的SOAP消息 ``` 5. **...