2016-10-19 3 views
0

Я пытаюсь реализовать небольшую коммуникационную схему, обрабатывающую 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 не закроет его снова?

+0

Невозможно, чтобы сервер мог отслеживать клиента при обычном http-подключении, поэтому не нужно (и возможно) устанавливать постоянное HTTP-соединение, я думаю. – marcel

ответ

1

Socket.io представляется разумной библиотекой для достижения постоянных соединений с Android на сервер Node.js.