2016-04-14 55 views
1

我有一個Node.js遊戲服務器,我通過運行nodemon app.js來啓動它。現在,每當我編輯一個文件服務器重新啓動。我已經實現了saveload的功能,並且我希望每次遊戲服務器重新啓動(由於文件chages)在重新啓動之前要保存遊戲,以便我可以在重新啓動後的以前狀態。Nodemon在每次重啓之前執行函數

像這樣的東西是什麼,我想:

process.on('restart', function(doneCallback) { 
    saveGame(doneCallback); 
    // The save game is async because it is writing toa file 
} 

我已經使用SIGUR2事件嘗試,但它從未被觸發。這是我試過的,但功能從未被調用。

// Save game before restarting 
process.once('SIGUSR2', function() { 
    console.log('SIGUR2'); 
    game.saveGame(function() { 
     process.kill(process.pid, 'SIGUSR2'); 
    }); 
}); 
+0

你有沒有嘗試https://github.com/remy/nodemon/blob/master/doc/events.md'nodemon.on('restart',...)'? – migg

+0

@migg不,沒有包含'nodemon'包,請看看。 – Cristy

+0

@migg不是,那個事件沒有被調用。 – Cristy

回答

0

下面的代碼在Unix機器上正常工作。現在,由於您的saveGame是異步的,您必須從回調中調用process.kill。

process.once('SIGUSR2', function() { 
    setTimeout(()=>{ 
     console.log('Shutting Down!'); 
     process.kill(process.pid, 'SIGUSR2'); 
    },3000); 

}); 

所以,你的代碼,只要你從game.saveGame()函數中執行回調函數看起來不錯。

// Save game before restarting 
process.once('SIGUSR2', function() { 
    console.log('SIGUR2'); 
    game.saveGame(function() { 
     process.kill(process.pid, 'SIGUSR2'); 
    }); 
}); 
+1

這仍然不能回答我的問題,你說的只是我的代碼工作正常,但在我的情況下它不是(在Windows上)。 – Cristy

相關問題