如何在node.js中超时后关闭套接字?
我正在尝试在1000毫秒后连接超时后关闭插座。我可以设置1000毫秒后触发的超时,但我似乎无法破坏套接字。。。有什么想法吗如何在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
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