当前位置:Gxlcms > PHP教程 > 是不是收到了1G的httppost数据,这个进程占用的内存就会有1G?

是不是收到了1G的httppost数据,这个进程占用的内存就会有1G?

时间:2021-07-01 10:21:17 帮助过:34人阅读

如果内存只有1G,接下来又会发生什么,比如php,死机?
如果是node.js,单进程本来就有1G的内存限制。又会发生什么,崩溃?

回复内容:

PHP 貌似确实会把接收到的 request body 放到内存里。所以为避免麻烦,php.ini 里通常会配置最大 request body size 限制,默认通常是 2MB、 4MB 之类的,总之不大 。超过这个限制的请求会直接被 413 掉。

而且如果用 node.js 的话,这个应该取决于实现 http server 的人自己的设定。比如说我完全可以把接收到的数据写到硬盘里,以免占用内存:
http.createServer(function (req, res) {
  var fd = fs.openSync('/tmp/' + Math.random(), 'w+');
  req.on('data', function (chunk) {
    fs.writeSync(fd, chunk);
  });
  req.on('end', function () {
    callbackWithRequestBody(fd);
    res.end();
  });
});
nodejs 的 buffer 内存似乎是另算的,另外这种超大文件上传一般都是流式处理,读多少写多少,内存占用不算高。 可以用流式处理获取到请求的流,慢慢读慢慢写就好了,node server获取到的request本身就是实现了readable stream的东西
详见Stream Node.js v5.1.1 Manual & Documentation
大部分的web框架只是封装了让你不直接接触到请求body的那个网络流。 不是的,都是流的形式,http/tcp底层都是TCP协议,读写都有一定的缓冲区,数据或文件通过流的形式不停写到本地

人气教程排行