【问题标题】:Connection timed out on AsyncTaskAsyncTask 上的连接超时
【发布时间】:2012-11-14 07:07:55
【问题描述】:

我在远程服务器调用我的服务器时遇到以下异常。

java.net.SocketException: Connection timed out
java.net.SocketTimeoutException: Connection timed out
java.net.ConnectException: failed to connect to www.my_url.com/my_ip (port 80): connect failed: ETIMEDOUT (Connection timed out)

我的服务器已启动,但我猜有一小部分时间由于某种原因它没有响应。

如何解释这些异常?它们是否每隔一段时间都正常,或者是一种常见的修复方法,允许在超时之前与服务器建立更长的连接时间?

我的服务器是运行 PHP 的 Apache。

提前感谢您的建议。

【问题讨论】:

  • 我有同样的问题 - 但它经常发生,我知道它不是我的服务器。这与 AsyncTask 代码有关吗?我最近将我的网络代码移动到 AsyncTask 并且 now 我遇到了错误。当我在 UI 线程上进行网络调用时,这从未发生在我身上......

标签: php android apache android-asynctask


【解决方案1】:

这些错误对于访问互联网的应用来说是很正常的。

但是,您可以尝试通过更改 HTTP 请求的超时值来减少它们的发生,如下所示:

HttpGet httpGet = new HttpGet(url);
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used. 
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT) 
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse response = httpClient.execute(httpGet);

如果您想设置任何现有HTTPClient 的参数(例如DefaultHttpClientAndroidHttpClient),您可以使用函数setParams()

httpClient.setParams(httpParameters);

【讨论】:

    【解决方案2】:

    除了提示用户某些问题不起作用并稍后重试之外,您无能为力,将其记录下来以供取证,并希望它们不会那么频繁。但是,我怀疑您的服务器由于多种原因没有响应,您可以采取一些措施。

    在发生此类超时时检查服务器的负载。运行 top 看看是什么占用了 CPU。如果您正在运行后台作业或应用程序的负载很高。如果您的后台作业占用了 CPU,那么您需要分析您的代码并找到算法在哪里运行热并改进它。如果你有负载问题或者你不能真正改进你的代码,那么你需要扩展你的服务器:更快的服务器,获得更多的内存,部署缓存,更快的数据库,运行 Quercus(比 C PHP 改进 4 倍)。或者获取更多服务器并使用负载均衡器进行水平扩展。后者在很大程度上取决于您的应用程序的架构,但这是您可以解决的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2011-08-01
      • 2019-06-20
      • 2022-01-21
      • 2014-03-01
      • 2018-08-17
      • 2018-01-26
      相关资源
      最近更新 更多