2010-05-21 3 views
1

Я пытаюсь закрыть сокет после истечения времени соединения после 1000 мс. Я могу установить таймаут, который запускается после 1000 мс, но я не могу уничтожить сокет ... любые идеи?Как закрыть сокет после таймаута в node.js?

var connection = http.createClient(80, 'localhost'); 
var request = connection.request('GET', '/somefile.xml', {'host':'localhost'}); 
var start = new Date().getTime(); 

request.socket.setTimeout(1000); 

request.socket.addListener("timeout", function() { 
    request.socket.destroy(); 
    sys.puts("socket timeout connection closed"); 
}); 

request.addListener("response", function(response) { 
    var responseBody = []; 
    response.setEncoding("utf8"); 
    response.addListener("data", function(chunk) { 
    sys.puts(chunk); 
    responseBody.push(chunk); 
    }); 

    response.addListener("end", function() { 

    }); 
}); 

request.end(); 

возвращает

socket timeout connection closed 
node.js:29 
    if (!x) throw new Error(msg || "assertion error"); 
       ^
Error: assertion error 
    at node.js:29:17 
    at Timer.callback (net:152:20) 
    at node.js:204:9 

ответ

0

Вы можете получить лучшие ответы на IRC канале #node.js на Freenode. Но узел AFAIK не совсем разработан для того, чтобы отменить что-то в середине. В основном люди просто оставляют его болтливым, так как в node.js нет блокировки ввода-вывода в любом случае.

Я согласен с тем, что должен быть способ отменить что-то в середине пути, но я не думаю, что вам нужно возиться с внутренним сокетным соединением запроса. Вот почему у вас есть абстракция http.ClientRequest для управления сокетом для вас. Ошибка может быть вызвана тем, что тайм-аут выполняет, но объект запроса не ожидал, что сокет уже будет закрыт.

Надеюсь, это поможет.

Смежные вопросы