2010-05-21 5 views
1

1000ms 후 연결 시간 초과 후 소켓을 닫으려고합니다. 1000ms 후에 트리거되는 타임 아웃을 설정할 수는 있지만 소켓을 파괴 할 수는 없습니다 ... 어떤 아이디어입니까?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

당신은 Freenode의에 IRC 채널 #node.js에 더 나은 답변을 얻을 수 있습니다. 그러나 AFAIK 노드는 중도에서 취소 할 수 있도록 설계되지 않았습니다. 대부분 사람들은 node.js에서 어쨌든 I/O를 차단하지 않기 때문에 매달려 있습니다.

나는 중도에서 뭔가를 취소 할 수있는 방법이 있어야한다고 동의하지만 요청의 내부 소켓 연결이 엉망이라고 생각하지 않습니다. 그래서 당신을 위해 소켓을 관리하기 위해 http.ClientRequest 추상화가있는 것입니다. 이 오류는 시간 제한 을 실행하지만 요청 개체가 소켓이 이미 닫히지 않았기 때문에 발생할 수 있습니다.

희망이 도움이됩니다.

관련 문제