我试图在1000ms后连接超时后关闭套接字。我可以设置一个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
答案 0 :(得分:2)
有两种方式。 问题是一个错误。
答案 1 :(得分:0)
您可以在freenode上的IRC频道#node.js
上获得更好的答案。但AFAIK节点并不是专为取消中途的东西而设计的。大多数人只是悬挂它,因为在node.js中,无论如何都没有阻塞I / O.
我同意,应该有一种方法可以在中途取消某些内容,但我认为你不应该混淆请求的内部套接字连接。这就是为什么你有http.ClientRequest
抽象来为你管理套接字的原因。错误可能是因为超时确实有效,但请求对象并不期望套接字已经关闭。
希望这有帮助。