Я работаю над приложением 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
в моем обработчике запросов, чтобы я мог проверить, совпадают ли идентификаторы.
Итак, что происходит: когда я изменяю зависимость, сервер останавливается, запускается новый и регистрируется новый идентификатор, что все подливает. Однако в течение случайного промежутка времени запросы к серверу все еще регистрируют старый идентификатор, указывая, что старый прослушиватель все еще каким-то образом подключен. В конце концов, слушатель, кажется, «переключается», и новый идентификатор регистрируется.
Обновление: похоже, это связано с событием close
(что неудивительно) - если я присоединяю простой console.log 'close'
обратный вызов к событию close
, идентификатор начинает меняться после 'close'
появляется. Однако для запуска события close
может потребоваться много времени (10 с +), почему это может занять так много времени?