Ich habe einen Client/Server implementiert, die über einen TCP-Socket kommunizieren. Die Daten, die ich in den Socket schreibe, sind JSON-Zeichenfolgen. Anfangs funktioniert alles wie erwartet, aber wenn ich die Rate der Schreibvorgänge erhöhe, stoße ich irgendwann auf JSON-Parserfehler, wobei der Anfang auf dem Client den Anfang des neuen Schreibvorgangs am Ende des alten erhält. HierProbleme beim Lesen einer Zeichenfolge aus TCP-Socket in Node.js
ist der Server-Code:
var data = {};
data.type = 'req';
data.id = 1;
data.size = 2;
var string = JSON.stringify(data);
client.write(string, callback());
Hier ist, wie ich diesen Code erhalte auf dem Client-Server:
client.on('data', function(req) {
var data = req.toString();
try {
json = JSON.parse(data);
} catch (err) {
console.log("JSON parse error:" + err);
}
});
Der Fehler, die ich als die Rate erhöht bin empfangen ist:
Die scheint der Beginn der nächsten Anfrage zu sein, die am Ende der aktuellen markiert wird ein.
Ich habe versucht zu verwenden; als Trennzeichen am Ende jeder Anforderung JSON und dann mit:
var data = req.toString().substring(0,req.toString().indexOf(';'));
aber dieser Ansatz scheint statt, was zu JSON Parse-Fehler in völlig fehlen einige Anfragen auf der Clientseite zu führen, wie ich die Steigerungsrate schreibt über 300 pro Sekunde.
Gibt es Best Practices oder effizientere Möglichkeiten, eingehende Anfragen über TCP-Sockets zu begrenzen?
Danke!
Es zwei verwandte Fragen ist [[1] (http://stackoverflow.com/questions/ 9962197/node-js-readline-not-warte-für-eine-Zeile-auf-Socket-Verbindungen), [2] (http://stackoverflow.com/questions/7034537/nodejs-what-is-the -proper-to-handling-tcp-socket-streams-which-delimiter)]. In beiden Fällen ist die Lösung die Verwendung von Trennzeichen und das Speichern der Reste der vorherigen Nachricht. Leider scheint eine bessere Lösung noch nicht zu existieren. – mayconbordin