var http = require('http');var server = http.createServer().listen(4000); server.on('close', function () { console.log('close event', Date.now()); }); server.on('request', function (req, res) { console.log('request', Date.now()); server.close(function () { console.log('server closed!', Date.now()); }); res.end('res ok'); })
为什么使用了 server.close()
,却不能触发 close
事件?
看了下 HTTP API 描述:
停止服务端接收新的连接。
以及 TCP API 描述:
使服务器停止接收新连接,只保持现存的连接。这个函数是异步的,当所有连接断开时,服务器关闭并且发出'close'事件...
原来 server.close()
只是使服务器停止接收新连接,并没有直接操作关闭服务器。只有当所有连接都断开的时候,服务器才会处于关闭状态并且发射 close
事件。
但是,代码改成延迟调用却可以直接关闭服务器(当然,得在5秒内建立一个HTTP
连接)。
如果按照 API 中的描述,close()
方法只是 停止服务端接收新的连接。那么,为什么改为后面这种方式却可以直接关闭服务器?
宝慕林4294392
相关分类