function init(_userSettings,httpServer,_adminApi) {
    server = httpServer;
    userSettings = _userSettings

    if (server && server.on) {
        // Add a listener to the upgrade event so that we can properly timeout connection
        // attempts that do not get handled by any nodes in the user's flow.
        // See #2956
        server.on('upgrade',(request, socket, head) => {
            // Add a no-op handler to the error event in case nothing upgrades this socket
            // before the remote end closes it. This ensures we don't get as uncaughtException
            socket.on("error", err => {})
            setTimeout(function() {
                // If this request has been handled elsewhere, the upgrade will have
                // been completed and bytes written back to the client.
                // If nothing has been written on the socket, nothing has handled the
                // upgrade, so we can consider this an unhandled upgrade.
                if (socket.bytesWritten === 0) {
                    socket.destroy();
                }
            },userSettings.inboundWebSocketTimeout || 5000)
        });
    }

    userSettings.version = getVersion();
    settings.init(userSettings);

    nodeApp = express();
    adminApp = express();
    const defaultServerSettings = {
        "x-powered-by": false
    }
    const serverSettings = Object.assign({},defaultServerSettings,userSettings.httpServerOptions||{});
    for (let eOption in serverSettings) {
        nodeApp.set(eOption, serverSettings[eOption]);
        adminApp.set(eOption, serverSettings[eOption]);
    }


    if (_adminApi) {
        adminApi = _adminApi;
    }
    redNodes.init(runtime);
    externalAPI.init(runtime);
}
Initialise the runtime module.
@param {Object} settings - the runtime settings object
@param {HTTPServer} server - the http server instance for the server to use
@param {AdminAPI} adminApi - an instance of @node-red/editor-api. <B>TODO</B>: This needs to be
                             better abstracted.
@memberof @node-red/runtime