if (!process.env.SOCKET && process.env.PORT && isNaN(+process.env.PORT)) {
log.warn('UNIX domain socket is now supported by using SOCKET. Please migrate from PORT hack.');
}
+
log.info(`Starting streaming API server master with ${numWorkers} workers`);
};
});
}, 30000);
- if (process.env.SOCKET || process.env.PORT && isNaN(+process.env.PORT)) {
- server.listen(process.env.SOCKET || process.env.PORT, () => {
- fs.chmodSync(server.address(), 0o666);
- log.info(`Worker ${workerId} now listening on ${server.address()}`);
- });
- } else {
- server.listen(+process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => {
- log.info(`Worker ${workerId} now listening on ${server.address().address}:${server.address().port}`);
- });
- }
+ attachServerWithConfig(server, address => {
+ log.info(`Worker ${workerId} now listening on ${address}`);
+ });
const onExit = () => {
log.info(`Worker ${workerId} exiting, bye bye`);
process.on('uncaughtException', onError);
};
-throng({
- workers: numWorkers,
- lifetime: Infinity,
- start: startWorker,
- master: startMaster,
+const attachServerWithConfig = (server, onSuccess) => {
+ if (process.env.SOCKET || process.env.PORT && isNaN(+process.env.PORT)) {
+ server.listen(process.env.SOCKET || process.env.PORT, () => {
+ fs.chmodSync(server.address(), 0o666);
+
+ if (onSuccess) {
+ onSuccess(server.address());
+ }
+ });
+ } else {
+ server.listen(+process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => {
+ if (onSuccess) {
+ onSuccess(`${server.address().address}:${server.address().port}`);
+ }
+ });
+ }
+};
+
+const onPortAvailable = onSuccess => {
+ const testServer = http.createServer();
+
+ testServer.once('error', err => {
+ onSuccess(err);
+ });
+
+ testServer.once('listening', () => {
+ testServer.once('close', () => onSuccess());
+ testServer.close();
+ });
+
+ attachServerWithConfig(testServer);
+};
+
+onPortAvailable(err => {
+ if (err) {
+ log.error('Could not start server, the port or socket is in use');
+ return;
+ }
+
+ throng({
+ workers: numWorkers,
+ lifetime: Infinity,
+ start: startWorker,
+ master: startMaster,
+ });
});