У меня есть виртуальный веб-сервер.У меня есть веб-сайт с логикой на PHP (бэкэнд для Yii 1) и приложение для Android, которое общается с сервером.Моя проблема заключается в том, что веб-браузер прекращает загрузку страниц с помощью ERR_CONNECTION_TIMED_OUT, когда мое приложение для Android работает из той же локальной сети.
В приложении для Android у меня есть таймер с интервалом 60 секунд, чтобы запросить у сервера новые данные.Требуется пара минут, чтобы браузер возобновил работу с моим сайтом.Я отправляю свои запросы с помощью AsyncTask и HttpUrlConnection:
public class ServerTask extends AsyncTask<Void, Void, JSONObject> {
private MyTask mTask;
private MyInterfaces.OnServerResponse mEvent = null;
private String readStream(InputStream in) {
BufferedReader reader = null;
StringBuffer response = new StringBuffer();
try {
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
response.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return response.toString();
}
public void setTask (MyTask nt) {mTask = nt;}
public void setEvent (MyInterfaces.OnServerResponse e) {mEvent = e;}
@Override
protected void onPreExecute() {
mTask.setSendingState(true);
mTask.setSendedState(false);
}
@Override
protected JSONObject doInBackground(Void... p) {
String resultString = "";
HttpURLConnection conn = null;
OutputStream os = null;
try {
if (State.mServerUpLog) {
Log.d("MyLibrary", "ServerTask URL: " + mTask.getUrl());
Log.d("MyLibrary", "ServerTask DATA: " + mTask.getData());
}
URL url = new URL(mTask.getUrl() + "?" + String.valueOf(System.currentTimeMillis()));
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Connection", "close");
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(Defines.mConnectTimeout);
conn.setReadTimeout(Defines.mReadTimeout);
if (mTask.getData().getBytes().length > 0) {
conn.setRequestProperty("Content-Length", "" + Integer.toString(mTask.getData().getBytes().length));
os = conn.getOutputStream();
byte[] data = mTask.getData().getBytes("UTF-8");
os.write(data);
}
conn.connect();
resultString = readStream(conn.getInputStream());
if (State.mServerDownLog) Log.d("MyLibrary", "<---" + resultString);
if (mTask.getTask() == Defines.MyTASKS.AUTHORIZE)
return new JSONObject("{\"result\":\"" + resultString + "\"}");
if (resultString.equalsIgnoreCase("0") || resultString.equalsIgnoreCase("fail")) {
mTask.setSendedState(true);
return null;
}
if (resultString.equalsIgnoreCase("ok")) {
mTask.setSendedState(true);
return new JSONObject();
}
try {
JSONObject mLastObject = new JSONObject(resultString);
mTask.setSendedState(true);
return mLastObject;
} catch (Throwable t) {
mTask.setSendedState(true);
t.printStackTrace();
}
} catch (MalformedURLException e) {
Log.d("MyLibrary", "ServerTask");
e.printStackTrace();
if (mEvent != null) mEvent.OnFailback(mTask.getHashCode());
return null;
} catch (IOException e) {
Log.d("MyLibrary", "ServerTask");
e.printStackTrace();
if (mEvent != null) mEvent.OnFailback(mTask.getHashCode());
return null;
} catch (Exception e) {
Log.d("MyLibrary", "ServerTask");
e.printStackTrace();
if (mEvent != null) mEvent.OnFailback(mTask.getHashCode());
return null;
}
finally {
if (os != null) try {os.close();} catch (IOException e) {;}
if (conn != null) conn.disconnect();
}
mTask.setSendedState(true);
return null;
}
protected void onPostExecute(JSONObject result) {
mTask.setSendingState(false);
if (result == null) return;
if (mEvent != null)
mEvent.OnEvent(result);
}}
Я уже добавил параметр URL "time", время ожидания и закрытие соединений.Помогите мне, пожалуйста, потому что я не знаю, что еще можно сделать, чтобы решить эту проблему.
PS: сайт работает хорошо из одной локальной сети с 10+ пользователями без приложения для Android.