Zaimplementowałem klienta/serwer, który komunikuje się za pomocą gniazda TCP. Dane, które zapisuję w gnieździe, to JSON. Początkowo wszystko działa zgodnie z oczekiwaniami, jednak gdy zwiększam szybkość zapisu, w końcu napotkam błędy analizy JSON, gdzie początek na kliencie otrzymuje początek nowego zapisu na końcu starego.Problemy podczas odczytywania ciągu znaków z gniazda TCP w pliku Node.js
Oto kod serwera:
var data = {};
data.type = 'req';
data.id = 1;
data.size = 2;
var string = JSON.stringify(data);
client.write(string, callback());
Oto jak ja otrzymuję ten kod na serwerze klienta:
client.on('data', function(req) {
var data = req.toString();
try {
json = JSON.parse(data);
} catch (err) {
console.log("JSON parse error:" + err);
}
});
Błąd, że jestem otrzymania wraz ze wzrostem stawki wynoszą:
SyntaxError: Unexpected token {
który wydaje się być początkiem następnego żądania są oznaczone na koniec bieżącego jeden.
Próbowałem używać; jako ogranicznik na końcu każdego żądania JSON, a następnie przy użyciu:
var data = req.toString().substring(0,req.toString().indexOf(';'));
Jednak to podejście, a nie w wyniku błędów analizy JSON wydaje się prowadzić do całkowicie brakuje niektórych żądań po stronie klienta, jak zwiększyć szybkość pisze ponad 300 na sekundę.
Czy istnieją jakieś sprawdzone metody lub bardziej skuteczne sposoby ograniczania przychodzących żądań za pośrednictwem gniazd TCP?
Dzięki!
Istnieją dwa Podobne pytania [[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-to -proper-way-to-handling-tcp-socket-streams-which-delimiter)]. W obu z nich rozwiązaniem jest użycie ograniczników oraz przechowywanie resztek poprzedniego komunikatu. Niestety, lepsze rozwiązanie nie wydaje się jeszcze istnieć. – mayconbordin