【问题标题】:Running node project a second time takes a long time to load (On Windows 10)第二次运行节点项目需要很长时间才能加载(在 Windows 10 上)
【发布时间】:2023-03-08 11:47:01
【问题描述】:

我一直试图在谷歌上找到这个问题,但我没有找到类似的东西。另外,我可以确认这不是项目的错,因为在 Ubunutu VM 中运行它每次都能完美运行。

我将运行node index.js,项目会在几秒钟内立即加载。但是,一旦我关闭它(使用 Ctrl-C)并再次运行node index.js,该项目将永远需要完全启动。加载通常需要大约一分钟(这使得调试非常糟糕)

对此有什么想法吗?

【问题讨论】:

  • 您是否尝试在另一台机器上运行您的代码?可能是一些无关的东西。如果您没有其他机器,请尝试从虚拟机运行它。
  • 是的,该代码在 VM 上完美运行。我也用一个非常简单/短的 node.js(在我的 Windows PC 上)文件尝试了同样的事情,同样的事情发生了
  • 看看你的日志在说什么会很有趣。 Windows 日志。有一些机会可能会有一些东西可以进一步挖掘。同时,您可以从具有管理权限的 Windows 终端运行此命令(搜索“cmd”并右键单击该项目,然后选择“以管理员身份运行”)。运行以下命令: 'sfc -scannow' 这可能需要一段时间,但如果它在 Windows 文件系统中发现错误,它将为您提供日志文件的路径。如果一切正常,则意味着您的文件系统很好,这是一个很好的新功能。哦,如果它发现问题,它会解决它。
  • 明确地说,这发生在您运行的 any 节点应用程序中,即使它只是一个简单的console.log 行?
  • 我做了更多的挖掘(和'sfc -scannow'),发现问题不是节点启动,而是快速关闭。特定端口会进入一个奇怪的“空”模式,直到它超时,然后可以引入一个新进程。我正在尝试找到一种手动关闭该连接的方法,但是诸如 server.close() 之类的东西只是超时并且不起作用

标签: javascript node.js express


【解决方案1】:

所以,我找到了这个问题的答案,我会在这里发布,因为这个问题几乎没有任何内容。

我意识到问题不是节点启动,而是快速关闭。端口无法正常关闭,即使它不会显示在 netstat 中。因此,当我尝试使用 express 执行 server.close() 时,它无法执行任何操作。从谷歌上的一个老问题中,我发现这是由于快速销毁套接字存在问题,所以我最终手动完成。这就是我的代码解决此问题的方式:

 server.on('connection', function(socket){
    sockets.push(socket);
})

process.stdin.resume(); //so program doesn't close instantly

process.on('SIGINT', function(){

    sockets.forEach(function(socket) {
        socket.destroy();
    });

    server.close(function(){
        console.log("Express connection closed");
        process.exit();
    });

    setTimeout( function () {
        console.error("Could not close connections in time, forcefully shutting down");
        process.exit(1);
    }, 20*1000);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多