Показать сообщение отдельно
  #4 (permalink)  
Старый 30.06.2016, 09:27
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Erolast
Мало того, твой код попросту небезопасен.
Это мини дев сервер, так что это не проблема)
Сообщение от Erolast
Нода использует ленивый сборщик мусора, который не освобождает память до последнего
Знаю, поэтому зазал global.gc(); и флаг --expose-gc. (обновленый код)

"use strict";
var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs"),
    mime = require("mime");

var staticPath = path.resolve("scripts-dist");

function getFile(filename) {
    if(fs.existsSync(filename)) {
       return fs.readFileSync(filename, "binary");
    }

    return null;
}

http.createServer(function(request, response) {

    var uri = url.parse(request.url).pathname,
        filename = path.join(staticPath, uri);

    var file = getFile(filename);

    if(file) {
        response.writeHead(200, {"Content-Type": mime.lookup(filename)});
        response.write(file, "binary");
        response.end();
        file = null;
        global.gc();
    }
    else {
        response.writeHead(404, {"Content-Type": "text/plain"});
        response.write("404 Not Found\n");
        response.end();
    }

}).listen(3001);


Сообщение от destus
Не получается ли такой ситуации, что я сделал запрос на сервер, файл начинает считываться, я закрываю соединение, не дождавшись окончания загрузки и весь наполовину считанный файл зависает в оперативной памяти сервера
Спасибо, не подумал об этом.
Сообщение от destus
Или происходит считывание большого файла в оперативную память и затем он начинает отдаваться клиенту. А если клиент медленный или таких клиентов много?
Это все для локального пользования.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием