我正在开发一个 Zappa 应用程序,我目前正在尝试制作一个小监视脚本来停止服务器,清除require.cache
然后重新要求并在文件更改时重新启动服务器,例如:
# watch all dependent files
for file of require.cache
fs.watch file, ->
# attach a handler to 'close'
# -- here's the issue: this takes far too long to trigger
server.on 'close', ->
server = require './server'
server.start()
# log the new server's id
console.log server.id
# stop the current server instance
server.stop()
# clear require's cache
delete require.cache[f] for f of require.cache
我的请求处理程序中也有console.log server.id
一行,因此我可以检查 ID 是否匹配。
所以,发生的事情是:当我改变一个依赖时,服务器停止,一个新的启动并且新的 ID 被记录,这都是肉汁。但是,在之后的随机时间内,对服务器的请求仍然记录旧 ID,表明旧的侦听器仍然以某种方式连接。最终,侦听器似乎“切换”并记录了新 ID。
更新:这似乎与close
事件有关(不足为奇) - 如果我将一个简单的console.log 'close'
回调附加到close
事件,ID 在'close'
出现后开始改变。但是,close
触发事件可能需要很长时间(10s+),为什么需要这么长时间?