如果我这样做:
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请求意味着它将不会被覆盖,但是我在documentation中找不到任何东西来支持此功能,而{{ 3}}有点迷宫。
我可以依靠这种行为吗?还是必须复制缓冲区以确保安全?
答案 0 :(得分:0)
正如Patrick Roberts在评论中指出的,最好的表明这样做是安全的来自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数据至少在连接期间是一致的,并且假设这意味着它是无限一致的,这并不是一件容易的事。