mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 02:35:49 +00:00
feature(server) add graceful shutdown
This commit is contained in:
parent
dccf79dc55
commit
7fc4e2f807
1 changed files with 17 additions and 3 deletions
|
|
@ -8,6 +8,7 @@ const {promisify} = require('util');
|
|||
const currify = require('currify');
|
||||
const squad = require('squad');
|
||||
const tryToCatch = require('try-to-catch');
|
||||
const wraptile = require('wraptile');
|
||||
|
||||
const config = require(DIR_SERVER + 'config');
|
||||
|
||||
|
|
@ -18,6 +19,12 @@ const exitPort = two(exit, 'cloudcmd --port: %s');
|
|||
const bind = (f, self) => f.bind(self);
|
||||
const promisifySelf = squad(promisify, bind);
|
||||
|
||||
const shutdown = wraptile(async (promises) => {
|
||||
console.log('closing cloudcmd...');
|
||||
await Promise.all(promises);
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
const opn = require('opn');
|
||||
const express = require('express');
|
||||
const io = require('socket.io');
|
||||
|
|
@ -43,21 +50,28 @@ module.exports = async (options) => {
|
|||
if (prefix)
|
||||
app.get('/', (req, res) => res.redirect(prefix + '/'));
|
||||
|
||||
const socketServer = io(server, {
|
||||
path: `${prefix}/socket.io`,
|
||||
});
|
||||
|
||||
app.use(prefix, cloudcmd({
|
||||
config: options,
|
||||
socket: io(server, {
|
||||
path: `${prefix}/socket.io`,
|
||||
}),
|
||||
socket: socketServer,
|
||||
}));
|
||||
|
||||
if (port < 0 || port > 65535)
|
||||
return exitPort('port number could be 1..65535, 0 means any available port');
|
||||
|
||||
const listen = promisifySelf(server.listen, server);
|
||||
const closeServer = promisifySelf(server.close, server);
|
||||
const closeSocket = promisifySelf(socketServer.close, socketServer);
|
||||
|
||||
server.on('error', exitPort);
|
||||
await listen(port, ip);
|
||||
|
||||
const close = shutdown([closeServer, closeSocket]);
|
||||
process.on('SIGINT', close);
|
||||
|
||||
const host = config('ip') || 'localhost';
|
||||
const port0 = port || server.address().port;
|
||||
const url = `http://${host}:${port0}${prefix}/`;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue