私はいくつかのテストを書いており、HTTP サーバーをプログラムで開始/停止できるようにしたいと考えています。HTTP サーバーを停止したら、それを開始したプロセスを終了させたいと思います。
私のサーバーは次のようなものです:
// file: `lib/my_server.js`
var LISTEN_PORT = 3000
function MyServer() {
http.Server.call(this, this.handle)
}
util.inherits(MyServer, http.Server)
MyServer.prototype.handle = function(req, res) {
// code
}
MyServer.prototype.start = function() {
this.listen(LISTEN_PORT, function() {
console.log('Listening for HTTP requests on port %d.', LISTEN_PORT)
})
}
MyServer.prototype.stop = function() {
this.close(function() {
console.log('Stopped listening.')
})
}
テストコードは次のようになります。
// file: `test.js`
var MyServer = require('./lib/my_server')
var my_server = new MyServer();
my_server.on('listening', function() {
my_server.stop()
})
my_server.start()
を実行すると、期待どおりnode test.js
の出力が得られます。stdout
$ node test.js
Listening for HTTP requests on port 3000.
Stopped listening.
node test.js
しかし、プロセスを生成して終了し、シェルに戻る方法がわかりません。
これで、ノードがリッスンしているイベントのイベント ハンドラーがバインドされている限り、ノードが実行され続けることを (抽象的に) 理解しました。でnode test.js
シェルを終了するには、my_server.stop()
イベントのバインドを解除する必要がありますか? もしそうなら、どのイベントから、どのオブジェクトから?すべてのイベントリスナーを削除して変更を試みMyServer.prototype.stop()
ましたが、うまくいきませんでした。