Socket
Socket
Sign inDemoInstall

server-shutdown

Package Overview
Dependencies
4
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.2.0 to 0.3.0

src/adapter/http.js

6

package.json
{
"name": "server-shutdown",
"version": "0.2.0",
"version": "0.3.0",
"description": "Gracefully shutdown any number of HTTP and WebSocket servers in node",

@@ -45,4 +45,6 @@ "main": "src/index.js",

"nyc": "^8.3.1",
"request": "^2.75.0"
"request": "^2.75.0",
"socket.io": "^1.5.1",
"socket.io-client": "^1.5.1"
}
}

@@ -53,12 +53,14 @@ # Server Shutdown

const io = socketio(httpServer);
serverShutdown.registerServer(io.engine);
serverShutdown.registerServer(io, ServerShutdown.Adapters.socketio);
## API
### `ServerShutdown.registerServer(server)`
### Methods
Registers a server with the library.
#### `ServerShutdown.registerServer(server[, adapterName = ServerShutdown.Adapters.http])`
### `ServerShutdown.shutdown([force = false][, callback])`
Registers a server with the library. The adapter name argument is used to set the type of server being registered.
#### `ServerShutdown.shutdown([force = false][, callback])`
Shutdown all the servers registered. If the optional `force` flag is provided and true all connections

@@ -68,2 +70,18 @@ are forecfully disconnected. The `callback` is called once all connections are disconnected and servers

#### `ServerShutdown.registerAdapter(name, adapter)`
Register a server adapter with the system. Name should be a string and adapter is an object that contains a
`close(server, callback)` function that is responsible for closing the server and a `socketClose(socket)`
function that is responsible for destroying the sockets the server creates.
### Constants
#### `ServerShutdown.Adapters.http`
The adapter name for the http adapter. Used with `ServerShutdown.registerAdapter`.
#### `ServerShutdown.Adapters.socketio`
The adapter name for the Socket.io adapter. Used with `ServerShutdown.registerAdapter`.
## Development

@@ -87,3 +105,3 @@

[6]: https://nodejs.org/api/http.html#http_event_request
[7]: https://nodejs.org/api/http.html#http_class_http_serverresponse
[7]: https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback
[8]: https://github.com/visionmedia/debug

@@ -5,2 +5,4 @@ 'use strict';

const debug = require('debug')('server-shutdown');
const httpAdapter = require('./adapter/http');
const socketioAdapter = require('./adapter/socketio');

@@ -10,2 +12,3 @@ function noop() {

}
class ServerShutdown {

@@ -15,2 +18,3 @@ constructor() {

this.servers = new Set();
this.adapters = new Map();
this.stopped = false;

@@ -21,10 +25,28 @@ this._serverConnectionHandler = this._serverConnectionHandler.bind(this);

this._destroySockets = this._destroySockets.bind(this);
this.registerAdapter(ServerShutdown.Adapters.http, httpAdapter);
this.registerAdapter(ServerShutdown.Adapters.socketio, socketioAdapter);
}
registerServer(server) {
registerAdapter(name, adapter) {
this.adapters.set(name, adapter);
}
registerServer(server, adapterName) {
if (!adapterName) {
/* eslint-disable no-param-reassign */
adapterName = ServerShutdown.Adapters.http;
/* eslint-enable no-param-reassign */
}
if (!this.adapters.has(adapterName)) {
throw new Error(`The adapter, ${adapterName}, is not registered`);
}
debug('Added server');
const adapter = this.adapters.get(adapterName);
this.servers.add(server);
server.serverShutdownAdapter = adapter;
server.on('request', this._socketRequestHandler);
server.on('upgrade', this._socketUpgradeHandler);
server.on('connection', this._serverConnectionHandler);
server.on('connection', (s) => this._serverConnectionHandler(s, adapter));
}

@@ -43,3 +65,3 @@

for (const server of this.servers) {
tasks.push(server.close.bind(server));
tasks.push((cb) => server.serverShutdownAdapter.close(server, cb));
}

@@ -54,5 +76,6 @@ tasks.push(async.ensureAsync((cb) => this._destroySockets(force, cb)));

_serverConnectionHandler(socket) {
_serverConnectionHandler(socket, adapter) {
debug('Starting connection');
socket.serverShutdownIdle = true;
socket.serverShutdownAdapter = adapter;
this.sockets.add(socket);

@@ -112,4 +135,3 @@ socket.on('close', () => {

debug('Destroying socket');
// Some sockets use close (engine.io), Node.js uses destroy
(socket.destroy || socket.close).call(socket);
socket.serverShutdownAdapter.socketClose(socket);
this.sockets.delete(socket);

@@ -119,2 +141,7 @@ }

ServerShutdown.Adapters = {
http: 'http',
socketio: 'socketio'
};
module.exports = ServerShutdown;
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc