我正在阅读优秀的在线书籍http://nodebeginner.org/,并尝试简单的代码
var http = require("http");
function onRequest(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888); 现在我不知道了(我仍然不知道!)如何优雅地关闭node.js,所以我选择了ctrl+z。现在,每次我尝试运行node server.js时,我都会收到以下错误消息。
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: EADDRINUSE, Address already in use
at Server._doListen (net.js:1100:5)
at net.js:1071:14
at Object.lookup (dns.js:153:45)
at Server.listen (net.js:1065:20)
at Object.<anonymous> (/Users/Bob/server.js:7:4)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at Array.<anonymous> (module.js:421:10)所以,有两个问题:
1)如何正常关闭node.js?
2)如何修复我造成的混乱?
发布于 2012-02-16 02:50:12
我目前使用Node的事件系统来响应信号。下面是我如何在程序中使用Ctrl-C (SIGINT)信号:
process.on( 'SIGINT', function() {
console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
// some other closing procedures go here
process.exit( );
})出现“Address in Use”错误是因为Ctrl-Z不会终止程序;它只是暂停类unix操作系统上的进程,而您放在后台的node程序仍然绑定到该端口。
在类Unix系统上,Control+Z是暂停进程(.3)的键序列的最常见的默认键盘映射。当用户在其计算机终端输入时,当前运行的前台进程被发送信号its信号,该信号通常导致进程暂停其执行。用户稍后可以通过键入命令'fg‘(前台的缩写)或键入'bg’(后台的缩写)以及进一步键入命令'disown‘来继续进程执行,以将后台进程与终端分开。1
您需要通过执行kill <pid>或‘kill -9 node’或类似操作来杀死您的进程。
发布于 2012-05-23 07:14:17
由于node.js是事件驱动的运行时,最合适的退出方式是耗尽挂起的事件队列。当事件队列为空时,该过程将结束。您可以通过执行一些操作来确保事件队列被排空,例如清除设置的任何间隔计时器,以及关闭任何具有打开的套接字连接的服务器。在使用第三方模块时,这会变得更加棘手,因为模块作者是否小心地清除了它创建的挂起事件,这取决于模块的作者。这可能不是退出node.js进程的最实用的方法,因为您将花费大量精力来跟踪“泄漏”的未决事件,但我认为这是最优雅的方法。
发布于 2013-02-15 06:58:25
1)如何正常关闭node.js?
侦听SIGINT信号。在Windows上,您需要使用readline模块监听ctrl-c。
我已经编写了自己的解决方案来提供应用程序的正常关闭和域的使用:grace。值得一看。
https://stackoverflow.com/questions/6958780
复制相似问题