私はZappaアプリケーションで作業していますが、現在はサーバーを停止して、require.cache
をクリアして、ファイルを再起動してサーバーを再起動するスクリプトを作成しようとしています変更は、のようなもの:私はIDが一致するかどうかを確認することができますので、NodeJS HTTPServerが閉じるまでに長時間かかります
# 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が記録されます。
更新:が、これは(当然)close
イベントに関連しているようだ - 私はclose
イベントにシンプルconsole.log 'close'
コールバックを添付した場合、IDは'close'
表示されたら変更を開始します。ただし、イベントが発生するまでには時間がかかります(10秒以上)、なぜ時間がかかるのですか? node.js docsによると