Skip to content

Commit 149ebab

Browse files
fix: web socket server closing
1 parent 947042f commit 149ebab

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

lib/Server.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -747,12 +747,11 @@ class Server {
747747
});
748748
}
749749

750-
close(cb) {
751-
this.sockets.forEach((socket) => {
752-
this.socketServer.closeConnection(socket);
753-
});
754-
755-
this.sockets = [];
750+
close(callback) {
751+
if (this.socketServer) {
752+
this.socketServer.close();
753+
this.sockets = [];
754+
}
756755

757756
const prom = Promise.all(
758757
this.staticWatchers.map((watcher) => watcher.close())
@@ -762,7 +761,7 @@ class Server {
762761
this.server.kill(() => {
763762
// watchers must be closed before closing middleware
764763
prom.then(() => {
765-
this.middleware.close(cb);
764+
this.middleware.close(callback);
766765
});
767766
});
768767
}

lib/servers/SockJSServer.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ module.exports = class SockJSServer extends BaseServer {
7272
connection.write(message);
7373
}
7474

75+
close(callback) {
76+
[...this.server.sockets].forEach((socket) => {
77+
this.closeConnection(socket);
78+
});
79+
80+
if (callback) {
81+
callback();
82+
}
83+
}
84+
7585
closeConnection(connection) {
7686
connection.close();
7787
}

lib/servers/WebsocketServer.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ module.exports = class WebsocketServer extends BaseServer {
3131

3232
const noop = () => {};
3333

34-
setInterval(() => {
34+
const interval = setInterval(() => {
3535
this.implementation.clients.forEach((socket) => {
3636
if (socket.isAlive === false) {
3737
return socket.terminate();
@@ -41,6 +41,10 @@ module.exports = class WebsocketServer extends BaseServer {
4141
socket.ping(noop);
4242
});
4343
}, this.server.webSocketHeartbeatInterval);
44+
45+
this.implementation.on('close', () => {
46+
clearInterval(interval);
47+
});
4448
}
4549

4650
send(connection, message) {
@@ -52,6 +56,10 @@ module.exports = class WebsocketServer extends BaseServer {
5256
connection.send(message);
5357
}
5458

59+
close(callback) {
60+
this.implementation.close(callback);
61+
}
62+
5563
closeConnection(connection) {
5664
connection.close();
5765
}

0 commit comments

Comments
 (0)