以编程方式停止和重新启动快速服务器(以更改端口)
Posted
技术标签:
【中文标题】以编程方式停止和重新启动快速服务器(以更改端口)【英文标题】:Programmatically stop and restart express servers (to change ports) 【发布时间】:2012-04-15 02:51:57 【问题描述】:我希望能够基本上更改运行我的 express 应用程序的端口。
我试过了:
server.on('close', function()
server.listen(3000);
);
server.listen(8080);
server.close();
这会返回一个神秘的 node.js 错误。我正在运行节点 v0.4.11,我现在正在升级以查看是否可以修复它。
编辑这是错误:
Assertion failed: (!io->watcher_.active), function Set, file ../src/node_io_watcher.cc, line 160.
谢谢, 马特
【问题讨论】:
.listen
是异步的,因此它会在打开之前尝试关闭。试试server.listen(8080, function() server.close(); );
,也许会奏效。
断言失败:(!io->watcher_.active),函数集,文件../src/node_io_watcher.cc,第160行。
实际上这看起来像是 0.4.11 中的错误。我已经升级到 0.7.7,它似乎正在工作。 @loganfsmyth,好点子 - 我不认为这是这里的问题,但这可能会导致问题。
@loganfsmyth 实际上从头开始。这似乎是问题的根源。您能否将其放入答案中以便我接受?谢谢大佬。
@Matt 很高兴提供帮助,已发布答案。
【参考方案1】:
感谢@aymericbeaumet,以下sn-p 可以与Express 4 一起使用:
var app = express();
var server = app.listen(8080, function()
console.log('Listening :)');
server.close(function() console.log('Doh :('); );
);
【讨论】:
【参考方案2】:问题在于.listen
是异步的。通过在调用.listen
之后立即调用.close
,您将在它打开之前将其关闭。
试试这个。
server.listen(8080, function()
server.close();
);
【讨论】:
#close 也是异步的。它有一个回调,仅在服务器处理完所有剩余连接时触发 app.close() 不是(更长的?) express api expressjs.com/en/api.html v4 的一部分 @HarryMoreno 是的,它是 Node API 的一部分 nodejs.org/api/net.html#net_server_close_callbackserver
在这个问题中是一个 Node 服务器,它附加了一个 express 应用程序。这不是快递app
本身。以上是关于以编程方式停止和重新启动快速服务器(以更改端口)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?