私は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をログに記録し、古いリスナーがまだ何らかの形で接続されていることを示します。最終的に、リスナーは「切り替え」たように見え、新しいIDがログに記録されます。
更新:これはclose
イベントに関連しているようです(当然のことながら)-イベントに単純なconsole.log 'close'
コールバックをアタッチすると、表示close
後にIDが変更され始め'close'
ます。ただし、イベントが発生するまでに長い時間(10秒以上)かかるclose
場合があります。なぜこれほど時間がかかるのでしょうか。