CNode

官方API 中 server.listen() 的一个 demo的疑惑

问答
Ggvforjob发布于12 年前最后回复12 年前2 回复4892 浏览0 收藏

官方API的 net.Server 中 server.listen 有个 demo

server.on('error', function (e) {
  if (e.code == 'EADDRINUSE') {
    console.log('Address in use, retrying...');
    setTimeout(function () {
      server.close();
      server.listen(PORT, HOST);
    }, 1000);
  }
});

error 事件触发之后不是会马上触发 close 事件的么?在 setTimeout 的回调中加入 server.close() 不仅多余,而且如果 server 已经 close 掉不是还是抛出异常?

查看回复

回复 (2)

G
GuoZhang#1·12 年前

看起来是这样:调用server.close()方法会关闭server,如果成功关闭,触发close事件。官网对close()的解释如下:

server.close([callback]) Stops the server from accepting new connections and keeps existing connections. This function is asynchronous, the server is finally closed when all connections are ended and the server emits a 'close' event. Optionally, you can pass a callback to listen for the 'close' event.

G
gvforjob#2·12 年前
引用 GuoZhang看起来是这样:调用server.close()方法会关闭server,如果成功关闭,触发close事件。官网对close()的解释如下: server.close([callback]) St...

@GuoZhang

Event: 'error'# Error Object Emitted when an error occurs. The 'close' event will be called directly following this event. See example in discussion of server.listen. 可Server的error事件中说close事件会directly执行,我找源码没找出,但估计是在process.nextTick中执行的。如果是这样的话,那么在setTimeout延迟到来之前server已经被close了

参与回复
登录后即可参与回复。登录