L'invio dei dati da Node.js a Java su TCP
-
26-09-2019 - |
Domanda
Sto cercando di inviare messaggi (array di byte) da Node.js a Java tramite il socket TCP (serializzato con protobuf).
I creare un server socket sul lato Java, e collegare ad esso dal nodo:
var client = net.createConnection(12345, "localhost")
client.addListener("connect", function(){
client.write(serializedMsg1)
client.end(serializedMsg2)
})
Sul java lato sto recupero del contenuto dal flusso di input e deserializzazione è:
Protocol1.parseFrom(inputStream);
Protocol2.parseFrom(inputStream);
Il problema sta seguendo - Sembra solo serializedMsg2
viene passato / deserializzati, mentre serializedMsg1
viene ignorato. Intendo che accade, perché il flusso di byte non è delimitato, e la dimensione dei blocchi di dati deve essere specificata in modo esplicito. I dati non devono essere lette direttamente dal flusso sul lato java -. Chunkds delimeted dovrebbe essere letto prima, e deserializzato come array di byte successiva
Soluzione
È possibile utilizzare Buffer
al fine di superare la dimensione dei dati-pezzo che si sta scrivendo al flusso:
function writeInt(stream, int){
var bytes = new Array(4)
bytes[0] = int >> 24
bytes[1] = int >> 16
bytes[2] = int >> 8
bytes[3] = int
stream.write(new Buffer(bytes))
}
...
writeInt(client, data.length)
client.write(data)
Sul lato Java:
int size = inputStream.readInt();
byte[] result = new byte[size];
inputStream.read(byteArray);