以编程方式停止和重新启动快速服务器(以更改端口)

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_callback server 在这个问题中是一个 Node 服务器,它附加了一个 express 应用程序。这不是快递app 本身。

以上是关于以编程方式停止和重新启动快速服务器(以更改端口)的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式停止 H2 数据库

如何以编程方式停止/启动远程计算机上的计划任务?

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?

如何使用 MsBuild 以编程方式在 IIS(6.0 和 7.0)中停止或启动网站?

redis启动,停止

如何以编程方式启动和停止歌曲? [重复]