Безопасно ли хранить буфер данных из socket.on ('data')? - PullRequest
0 голосов
/ 16 ноября 2018

Если я сделаю это:

const net = require('net');
const allData = [];
const server = net.createServer((socket) => {
    socket.on('data', (data) => {
        allData.push(data); // store data; not a copy of it
    });
});
server.listen(8080, '127.0.0.1');

setInterval(() => {
    console.log(allData);
}, 5000);

Могу ли я гарантировать, что данные, хранящиеся в allData, будут согласованными?Или net может повторно использовать буферы для более поздних данных?

Тестирование с кодом выше и отправка простых запросов cURL подразумевает, что не будет перезаписано, но я могуВ документации ничего не найдено, и код является чем-то вроде лабиринта.

Могу ли я полагаться на это поведение или я должен сделатькопия буфера в безопасности?

1 Ответ

0 голосов
/ 18 ноября 2018

Как отметил Патрик Робертс в комментариях, лучшим признаком того, что это безопасно, является пример Node.js, выполняющий аналогичные действия.После некоторой охоты я нашел этот пример (для http, а не net, но они тесно связаны);

let body = [];
request.on('data', (chunk) => {
  body.push(chunk);
}).on('end', () => {
  body = Buffer.concat(body).toString();
  // at this point, `body` has the entire request body stored in it as a string
});

Источник: https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/#request-body

Это означает, что данные http согласованы, по крайней мере, на время соединения, и не слишком сложно предположить, что это означает, что они согласованы бесконечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...