2016-10-19 7 views
0

AndroidデバイスからNode.jsサーバーへのHTTPリクエストを処理する小さな通信方式を実装しようとしています。現在のコードでは、Android側はヘッダからの応答を受け取った後に接続を閉じます。AndroidからNode.jsサーバーへの永続的なHTTP接続

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

ノード:

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サーバーへの永続的な接続を実現するための合理的なライブラリのようです。

関連する問題