节点缓冲

时间:2014-10-16 07:46:23

标签: node.js

在我深入研究connect和express等框架之前,我正在学习基本节点。我遇到过缓冲区的主题。我什么时候需要在节点中使用缓冲区?如何知道缓冲区的大小?

如果我在POST请求中发送了一串文本,我是否需要缓冲它?

var server = http.createServer(function(req,res) {
    var body = '';
    req.setEncoding('utf8');
    req.on('data', function(chunk) { body += chunk});
    req.on('end', function() { //... });
});

我知道connect提供了limit()功能,但我不确定这是否会延迟到后台缓冲区。除此之外,我特别感兴趣的是,在vanilla节点中,我是否需要使用缓冲区来存储JSON和字符串等数据,或者当我的数据可能像文件上传一样大时,我应该使用缓冲区吗? / p>

1 个答案:

答案 0 :(得分:1)

我不确定你要求的是什么,但你有两个选择。 您可以将所有数据作为字符串检索,然后将其作为缓冲区包装或立即连接缓冲区。

新缓冲区

var server = http.createServer(function(req,res) {
    var body = '';
    req.setEncoding('utf8');
    req.on('data', function(chunk) { body += chunk});
    req.on('end', function() {
      var myBuffer = new Buffer(body); // this is now a buffer of the received chunks
    });
});

Buffer.concat

var server = http.createServer(function(req,res) {
    var bufs = [];
    req.on('data', function(chunk) { bufs.push(chunk); });
    req.on('end', function() {
      var myBuffer = Buffer.concat(bufs); // this is now a buffer of the received chunks
    });
});

注意

  

Pure JavaScript对Unicode友好,但对二进制数据不好。什么时候   处理TCP流或文件系统,处理它是必要的   八位组流。 Node有几种操作,创建,   并消耗八位字节流。

     

原始数据存储在Buffer类的实例中。缓冲区是   类似于整数数组但对应于原始内存   在V8堆外部分配。缓冲区无法调整大小。

     

Buffer类是全局的,因此非常罕见   要求('缓冲区')。