Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 异步任务上的连接超时_Php_Android_Apache_Android Asynctask - Fatal编程技术网

Php 异步任务上的连接超时

Php 异步任务上的连接超时,php,android,apache,android-asynctask,Php,Android,Apache,Android Asynctask,我在对我的服务器的远程服务器调用中遇到以下异常 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 o

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

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


感谢您提前提出建议。

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

但是,您可以尝试通过更改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
(例如
DefaultHttpClient
AndroidHttpClient
)的参数,可以使用函数
setParams()


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

但是,您可以尝试通过更改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
(例如
DefaultHttpClient
AndroidHttpClient
)的参数,可以使用函数
setParams()


在客户端上,除了提示用户某些东西不起作用,然后稍后再试,记录下来进行取证,并希望它们不会那么频繁之外,您无能为力。但是,我怀疑您的服务器没有响应有几个原因,您可以对此采取一些措施


当发生这样的超时时,请检查服务器的负载。运行top,看看是什么消耗了CPU。如果后台作业正在运行或应用程序的负载很高。如果你有一个后台工作占用了CPU,那么你需要分析你的代码,找出算法运行的热点并改进它。如果您有负载问题或者无法真正改进代码,那么您需要扩展服务器:更快的服务器、获得更多内存、部署缓存、更快的数据库、运行Quercus(比C PHP提高4倍)。或者使用负载平衡器获得更多服务器并进行水平扩展。后者在很大程度上取决于应用程序的体系结构,但这是可以修复的。

对于这些问题,在客户端上除了提示用户某些东西不起作用,然后稍后重试,记录下来以便进行取证外,您无法做任何其他事情,希望它们不会那么频繁。但是,我怀疑您的服务器没有响应有几个原因,您可以对此采取一些措施


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

我也有同样的问题,但它经常发生,我知道它不是我的服务器。这与AsyncTask代码相关吗?我最近将网络代码移动到AsyncTask,现在出现了错误。当我在UI线程上进行网络调用时,这种情况从未发生在我身上……我有完全相同的问题——但这种情况经常发生,我知道这不是我的服务器。这与AsyncTask代码相关吗?我最近将网络代码移动到AsyncTask,现在出现了错误。当我在UI线程上进行网络调用时,这种情况从未发生在我身上。。。