2016-10-19 48 views
0

我想实现一个小通信方案来处理从Android设备到Node.js服务器的HTTP请求。使用当前代码,Android端在收到标题响应后关闭连接。从Android到Node.js服务器的持久HTTP连接

爪哇:

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; 
} 

节点:

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服务器的持久连接。