Node.js 'http.Server и http.createServer, какая разница? - программирование
Подтвердить что ты не робот

Node.js 'http.Server и http.createServer, какая разница?

В чем разница между:

http.Server(функция (req, res) {});

и

http.createServer(функция (req, res) {});

4b9b3361

Ответ 1

На основе исходного кода nodejs (извлечения ниже) createServer является просто вспомогательным методом для создания экземпляра Server.

Извлеките из строку 1674 http.js.

exports.Server = Server;


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

Итак, единственная истинная разница в двух фрагментах кода, о которых вы упоминали в своем исходном вопросе, заключается в том, что вы не используете ключевое слово new.


Для ясности конструктор Server выглядит следующим образом (во время 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);

Ответ 2

Согласно документам, кажется,

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