这是一个简单的脚本
var http = require("http");
http.get( WEBSITE, function(res) {
console.log("Does not return");
return;
});
如果 WEBSITE
变量是 ' http://google.com ' 或 ' http://facebook.com ' 脚本不返回到控制台。
但是如果 WEBSITE
变量是 ' http://yahoo.com ' 或 ' http://wikipedia.org ' 它返回到控制台。有什么不同?
最佳答案
通过“返回控制台”,我假设您的意思是 Node 退出并在 shell 提示符下返回。
事实上, Node 确实最终退出了您列出的所有这些域。 (你只是不耐烦。)
您看到的是 HTTP keep-alives 的结果。默认情况下, Node 在 HTTP 请求完成后保持 TCP 连接打开。这使得对同一服务器的后续请求更快。只要 TCP 连接仍然打开, Node 就不会退出。
最终, Node 或服务器将关闭空闲连接(因此 Node 将退出)。与雅虎和维基百科相比,谷歌和 Facebook 允许闲置连接的时间可能更长。
如果您希望脚本发出请求并在完成后立即退出,则需要禁用 HTTP keep-alives。您可以通过禁用 Agent 来做到这一点支持。
http.get({ host:'google.com', port:80, path:'/', agent:false }, function(res) {
...
});
只有在需要此特定功能时才禁用代理。在正常的、长时间运行的应用程序中,禁用代理会导致很多问题。
还有some other approaches you can take to avoid keep-alives keeping node running .
关于node.js - 获取请求后,脚本不返回到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23068327/