wulfgarpro
wulfgarpro

Reputation: 6924

Node.js' http.Server and http.createServer, what's the difference?

What is the difference between:

http.Server(function(req,res) {});

and

http.createServer(function(req, res) {});

Upvotes: 28

Views: 9902

Answers (2)

Bergi
Bergi

Reputation: 664164

According to the docs, it seems to be

http.createServer = function (requestListener) {
     var ser = new http.Server();
     ser.addListener(requestListener);
     return ser;
};

Upvotes: 2

isNaN1247
isNaN1247

Reputation: 18099

Based on the source code of nodejs (extract below), createServer is just a helper method to instantiate a Server.

Extract from line 1674 of http.js.

exports.Server = Server;


exports.createServer = function(requestListener) {
  return new Server(requestListener);
};

So therefore the only true difference in the two code snippets you've mentioned in your original question, is that you're not using the new keyword.


For clarity the Server constructor is as follows (at time of post - 2012-12-13):

function Server(requestListener) {
  if (!(this instanceof Server)) return new Server(requestListener);
  net.Server.call(this, { allowHalfOpen: true });

  if (requestListener) {
    this.addListener('request', requestListener);
  }

  // Similar option to this. Too lazy to write my own docs.
  // http://www.squid-cache.org/Doc/config/half_closed_clients/
  // http://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F
  this.httpAllowHalfOpen = false;

  this.addListener('connection', connectionListener);

  this.addListener('clientError', function(err, conn) {
    conn.destroy(err);
  });
}
util.inherits(Server, net.Server);

Upvotes: 26

Related Questions