Буферы узла js для входящих данных

#node.js

#node.js

Вопрос:

Мне интересно, имеет ли смысл использовать буфер узла для входящих клиентских данных на сервер. Мой сервер и клиенты основаны на TCP, и я использую <EOF> их для определения конца сообщения. Сообщение всегда имеет формат JSON.

например: {"name":"Bob"}<EOF>

В случае, если все сообщение не проходит, должен ли я использовать буфер узла для создания данных или обычную строку?

Если это буфер, я не думаю, что понимаю, как правильно его создать. Это мой Client конструктор, который создается каждый раз, когда сокет подключается к серверу узла.

 constructor(socket){
    var self = this;

    // properties
    this.socket = socket;

    this.buffer = Buffer.alloc(1024);
    this.dataEnd = '<EOF>';

    // append <EOF> to every msg
    this.socket.write = function(msg){
        msg  = "<EOF>";
        return Socket.prototype.write.call(this, msg);
    };

    // build up buffer
    this.socket.on('data', function(data){
        var buffLen = self.buffer.length;
        var dataBuffer = Buffer.from(data);
        if(buffLen   dataBuffer.length < 1024){
            if(data.indexOf(self.dataEnd) === -1){
                self.buffer.concat(dataBuffer);
            }
        }
    });

    return this;
}
  

Комментарии:

1. Буферы в основном предназначены для потоков двоичных данных, нет смысла использовать буфер для строки.

2. Ну, допустим, я запускаю сервер js узла и ожидаю, что от 100 до 1000 клиентов будут отправлять сообщения каждые несколько секунд между сервером и клиентом. Разве я не должен создавать там сообщения в буферах? Что сказать, что я получаю полное сообщение и т. Д.?

3. Есть ли проблема с вашим текущим кодом, с которой вам нужна помощь? (Это выглядит довольно разумно… если ваш вопрос просто «Можно ли использовать буфер для буферизации данных?» ответ «Да».)

4. Повторное чтение вопроса, я думаю, я не совсем понял. Вы используете дуплексные потоки TCP, которые сами по себе являются буферизацией и отправкой октетов. Вы читаете и записываете в поток, поэтому вы действительно не знаете, когда заканчивается сообщение, поэтому вы добавляете <EOF> в конец каждого сообщения. Когда вы получаете данные, вы не всегда получаете все сообщение за один раз, и вам нужно создавать его, пока не увидите a <EOF> , чтобы вы знали, что сообщение завершено. Если да, то да, для этого можно использовать буферы.

5. Да, это правильно. Но .. может быть, я просто спрашиваю — правильно ли я использую буферы? Я всегда создаю новый буфер и объединяю его со статическим. Я надеялся найти что-то более похожее на StringBuilder c #, где я мог бы просто нажать до конца буфера ..?