2012-01-22 10 views
5

Sto cercando di svuotare una presa prima di inviare il successivo blocco di dati:Node.js: come svuotare il socket?

var net = require('net'); 

net.createServer(function(socket) { 
    socket.on('data', function(data) { 
     console.log(data.toString()); 
    }); 
}).listen(54358, '127.0.0.1'); 

var socket = net.createConnection(54358, '127.0.0.1'); 

socket.setNoDelay(true); 
socket.write('mentos'); 
socket.write('cola'); 

Questo, tuttavia, non funziona, nonostante l'opzione setNoDelay, per esempio stampa "mentoscola" anziché "mentos \ ncola". Come posso risolvere questo?

risposta

5

Esaminando l'API WriteableStream e l'esempio associato sembra che sia necessario impostare le interruzioni oi delimitatori autonomamente.

exports.puts = function (d) { 
    process.stdout.write(d + '\n'); 
}; 

Perché la vostra presa è un flusso, saranno scritte/lette senza il vostro controllo diretto dei dati, e #write non cambierà i vostri dati o assumere sei un senso alla rottura tra scrittura, dal momento che si potrebbe essere in streaming una grande quantità di informazioni sul socket e potrebbe voler impostare altri delimitatori.

Non sono assolutamente esperto in questo settore, ma mi sembra la risposta logica.

Edit: Questo è un duplicato di Nodejs streaming, e la conclusione c'era la stessa come la risposta ho specificato: lavorare con i flussi non è la linea per linea, impostare il proprio delimitatori.

0

Forse tutti i dati scritti nello stesso tick vengono inviati come batch.

Forse sul lato ricezione, il nodo combinerà i segmenti di dati separati prima di emettere l'evento di dati.

+7

forse, forse, ... – nalply

Problemi correlati