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