是不是收到了1G的http post數據,這個進程佔用的內存就會有1G?
12-27
如果內存只有1G,接下來又會發生什麼,比如php,死機?
如果是node.js,單進程本來就有1G的內存限制。又會發生什麼,崩潰?
nodejs 的 buffer 內存似乎是另算的,另外這種超大文件上傳一般都是流式處理,讀多少寫多少,內存佔用不算高。
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();
});
});
可以用流式處理獲取到請求的流,慢慢讀慢慢寫就好了,node server獲取到的request本身就是實現了readable stream的東西
詳見Stream Node.js v5.1.1 Manual Documentation
大部分的web框架只是封裝了讓你不直接接觸到請求body的那個網路流。
不是的,都是流的形式,http/tcp底層都是TCP協議,讀寫都有一定的緩衝區,數據或文件通過流的形式不停寫到本地
推薦閱讀:
※你怎麼用最通俗的話解釋AJAX是什麼東西?
※PHP 的極限在哪裡?
※kindeditor編輯器保存的文章帶html標籤,進行文章關鍵詞搜索如何排除標籤內容干擾?
※PHP為什麼這麼難學?
※你用PHP寫過哪些好玩的東西呢?