http.createServer (aplicativo) v. http.Server (aplicativo)

Na página da Web socket.io,Get Started: Chat application, localizado aqui:

http://socket.io/get-started/chat/

existe este código:

var app = require('express')();
var http = require('http').Server(app);

que poderia ser reescrito um pouco mais claramente assim:

var express = require('express');
var http = require('http');

var app = express();
var server = http.Server(app);

O exemplo do socket.io usa http.Server () para criar um servidor. No entanto, os documentos expressos paraapp.listen () mostra um exemplo em que o servidor é criado usandohttp.createServer(app):

app.listen ()
Ligue e ouça as conexões no host e na porta fornecidos. Este método é idêntico ao http.Server # listen () do nó.

var express = require('express');  
var app = express();  
app.listen(3000);

O aplicativo retornado por express () é de fato uma Função JavaScript, projetada para ser transmitida aos servidores HTTP do nó como um retorno de chamada para manipular solicitações. Isso permite que você forneça facilmente as versões HTTP e HTTPS do seu aplicativo a mesma base de código, pois o aplicativo não herda delas (é simplesmente um retorno de chamada):

var express = require('express');
var https = require('https');
var http = require('http');
var app = express();

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

O método app.listen () é um método conveniente para o seguinte (se você deseja usar HTTPS ou fornecer os dois, use a técnica acima):

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

Qual é a diferença entrehttp.createServer(app) ehttp.Server(app)?? Os documentos http não ajudam.