HTTPサーバのコネクションを切断して終了する
HTTPサーバを起動するコードは散々書いたけど、終了するっていうのを書いた事なかったので調べて書いた。
index.js
#!/usr/bin/env node var http = require('http'), server = http.createServer(); process.on('uncaughtException', function (err) { console.error(err); }); server.once('close', function () { console.log('closed'); server.removeAllListeners('request'); }); server.on('request', function (req, res) { var end = /end$/.test(req.url); res.writeHead(200, {'content-type': 'text/plain'}); res.end(end ? 'close' : 'Hello!'); if (end) { server.close(); req.connection.end(); req.connection.destroy(); } }); server.listen(3000, function () { console.log('Server running at http://localhost:3000'); });
removeAllListenersは余計かも。
$ node index.js
で起動したら、localhost:3000にアクセスするとHello!が表示される。
localhost:3000/endにアクセスするとサーバが終了する。
Keep-Aliveが有効になってても切るみたい。req.connection.destroy()の部分かな、たぶん。
server.close()で閉じないなあと思ったら、req.connectionを切ってあげないとだったなんて。
まだまだHTTPがわかっていないというか。
これで安全に終了する、的なコードが書けるのかな。そもそも終了ってあんまり普通はしないかもだけど。
参考:
Graceful shutdown of a node.JS HTTP server - Stack Overflow