如何在node.js超时后closures套接字?

我试图在连接超时1000毫秒后closures套接字。 我能够设置一个超时,在1000ms后触发,但我似乎无法破坏套接字…任何想法?

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 

您可能会在freenode上的IRC频道#node.js上获得更好的答案。 但是AFAIK节点并不完全是为了中途取消而devise的。 大多数人只是离开它,因为在node.js中,无论如何都没有阻塞I / O。

我同意,但应该有办法取消一些中途,但我不认为你应该搞砸请求的内部套接字连接。 这就是为什么你有http.ClientRequest抽象来pipe理你的套接字。 错误可能是因为超时工作,但请求对象不希望套接字已经被closures。

希望这可以帮助。