@mojojs/core
Version:
Real-time web framework
95 lines (85 loc) • 3.97 kB
JavaScript
import { Server } from '../server.js';
import nopt from 'nopt';
const EVENTS = ['SIGINT', 'SIGTERM', 'SIGUSR2'];
/**
* Server command.
*/
export default async function serverCommand(app, args) {
const parsed = nopt({
cluster: Boolean,
'headers-timeout': Number,
'keep-alive-timeout': Number,
level: String,
listen: [String, Array],
proxy: Boolean,
requests: Number,
'request-timeout': Number,
workers: Number
}, { c: '--cluster', L: '--level', l: '--listen', p: '--proxy', r: '--requests', w: '--workers' }, args, 1);
if (parsed.level !== undefined)
app.log.level = parsed.level;
const server = new Server(app, {
cluster: parsed.cluster,
headersTimeout: parsed['headers-timeout'],
keepAliveTimeout: parsed['keep-alive-timeout'],
listen: parsed.listen,
maxRequestsPerSocket: parsed.requests,
requestTimeout: parsed['request-timeout'],
reverseProxy: parsed.proxy,
workers: parsed.workers
});
const listener = () => {
EVENTS.forEach(signal => process.removeListener(signal, listener));
server.stop().catch(error => app.log.error(error));
};
EVENTS.forEach(signal => process.on(signal, listener));
await server.start();
}
serverCommand.description = 'Start application with HTTP and WebSocket server';
serverCommand.usage = `Usage: APPLICATION server [OPTIONS]
node index.js server
node index.js server --level trace
node index.js server --cluster
node index.js server --requests 10 --keep-alive-timeout 30000
node index.js server -l http://*:4000
# Run server in production mode
NODE_ENV=production node index.js server
# Listen on all interfaces
node index.js server -l http://*:3000
# Listen only on IPv6 interfaces
node index.js server -l http://[::1]:3000
# Listen on two ports
node index.js server -l http://127.0.0.1:3000 -l http://*:4000
# Listen on UNIX domain socket
node index.js server -l http+unix:///var/run/myapp.sock
# File descriptor, as used by systemd
node index.js server -l http://127.0.0.1?fd=3
# Listen on two ports with HTTP and HTTPS at the same time
node index.js server -l http://*:3000 -l https://*:4000
# Use a custom certificate and key
node index.js server -l 'https://*:443?cert=./server.crt&key=./server.key'
Options:
-c, --cluster Run in cluster mode with multiple processes
--headers-timeout <ms> Limit the amount of time the parser will
wait to receive the complete HTTP headers,
defaults to 60000
-h, --help Show this summary of available options
--keep-alive-timeout <ms> Limit the amount of time of inactivity a
server needs to wait for additional incoming
data, after it has finished writing the last
response, before a socket will be destroyed,
defaults to 5000
-L, --level <level> Log level for application
-l, --listen <location> One or more locations you want to listen on,
defaults to "http://*:3000"
-p, --proxy Activate reverse proxy support
-r, --requests <num> Maximum number of requests socket can handle
before closing keep alive connection,
defaults to 0
--request-timeout <ms> Limit the amount of time for receiving the
entire request from the client, defaults to
300000
-w, --workers <num> Number of workers to spawn in cluster mode,
defaults to the number of available CPUs
`;
//# sourceMappingURL=server.js.map