Я пытаюсь реализовать небольшую коммуникационную схему, обрабатывающую HTTP-запросы с устройства Android на сервер Node.js. С помощью текущего кода сторона Android закрывает соединение после получения ответа от заголовка.Постоянное HTTP-соединение с Android на сервер Node.js
Java:
public String doInBackground(Void... params) {
URL url = new URL("http://" + mServer.getHost() + ":" + mServer.getPort() + "/" + mPath);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setConnectTimeout(TIMEOUT);
http.setRequestMethod("POST");
http.setDoOutput(true);
http.connect();
OutputStream out = http.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out);
writer.write(mJson);
writer.flush();
writer.close();
mResponseCode = http.getResponseCode();
if (mResponseCode != 200) {
http.disconnect();
return "";
}
InputStreamReader in = new InputStreamReader(http.getInputStream());
BufferedReader br = new BufferedReader(in);
char[] chars = new char[BUF_SIZE];
int size = br.read(chars);
String response = new String(chars).substring(0, size);
//http.disconnect();
return response;
}
Node:
this.socket = http.createServer((req, res) => {
req.on('data', (chunk) => {
this.log.info("DATA");
obj = JSON.parse(chunk.toString());
});
req.on('close',() => {
this.log.info("CLOSE");
});
req.on('connection', (socket) => {
this.log.info("CONNECTION");
});
req.on('end',() => {
this.log.info("END");
});
});
this.socket.listen(this.port, this.host);
Далее connection
событие на стороне узла никогда не вызывается, каждый запрос непосредственно поступает в data
событие.
Есть ли способ установить постоянное HTTP-соединение, чтобы сервер узла мог отслеживать его во время соединения, пока сторона Android не закроет его снова?
Невозможно, чтобы сервер мог отслеживать клиента при обычном http-подключении, поэтому не нужно (и возможно) устанавливать постоянное HTTP-соединение, я думаю. – marcel