Ho implementato un client/server che comunica utilizzando un socket TCP. I dati che sto scrivendo sul socket sono JSON con stringhe. Inizialmente tutto funziona come previsto, tuttavia, mentre aumento il tasso di scritture, alla fine mi imbatto in errori di analisi JSON in cui l'inizio sul client riceve l'inizio della nuova scrittura alla fine di quella precedente.Problemi durante la lettura di una stringa dal socket TCP in Node.js
Ecco il codice del server:
var data = {};
data.type = 'req';
data.id = 1;
data.size = 2;
var string = JSON.stringify(data);
client.write(string, callback());
Ecco come sto ricevendo questo codice sul server client:
client.on('data', function(req) {
var data = req.toString();
try {
json = JSON.parse(data);
} catch (err) {
console.log("JSON parse error:" + err);
}
});
L'errore che sto ricevendo con l'aumentare dei tassi è:
SyntaxError: Unexpected token {
Quale sembra essere l'inizio della prossima richiesta taggata alla fine della corrente uno.
Ho provato a usare; come delimitatore alla fine di ogni richiesta JSON e quindi utilizzando:
var data = req.toString().substring(0,req.toString().indexOf(';'));
Tuttavia questo approccio, invece di conseguente errori di analisi JSON sembra comportare manca completamente alcune richieste sul lato client, come ho aumentare il tasso di scrive oltre 300 al secondo.
Esistono buone pratiche o metodi più efficienti per delimitare le richieste in arrivo tramite socket TCP?
Grazie!
Ci sono due questioni correlate [[1] (http://stackoverflow.com/questions/ 9962197/node-js-readline-not-waiting-for-a-full-line-on-socket-connections), [2] (http://stackoverflow.com/questions/7034537/nodejs-what-is-the -proper-way-to-movimentazione-tcp-zoccolo-stream-che-delimitatore)]. In entrambi la soluzione è l'uso di delimitatori, oltre a memorizzare gli avanzi del messaggio precedente. Sfortunatamente una soluzione migliore non sembra ancora esistere. – mayconbordin