如何在node.js中超时后关闭套接字?

如何在node.js中超时后关闭套接字?,node.js,Node.js,我正在尝试在1000毫秒后连接超时后关闭插座。我可以设置1000毫秒后触发的超时,但我似乎无法破坏套接字。。。有什么想法吗 var connection = http.createClient(80, 'localhost'); var request = connection.request('GET', '/somefile.xml', {'host':'localhost'}); var start = new Date().getTime(); request.socket.setTi

我正在尝试在1000毫秒后连接超时后关闭插座。我可以设置1000毫秒后触发的超时,但我似乎无法破坏套接字。。。有什么想法吗

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节点并不是专门为中途取消某些内容而设计的。大多数人只是让它挂起,因为在node.js中,没有阻塞I/O

不过我同意,应该有一种方法中途取消某些内容,但我认为您不应该弄乱请求的内部套接字连接。这就是为什么您有
http.ClientRequest
抽象来为您管理套接字。错误可能是因为超时确实有效,但请求对象不希望套接字已经关闭

希望这有帮助。

有两种方法。 问题是一个bug

  • 将node.js升级到gt 0.3.7

  • 编辑代码