Skip to content

Commit b122e1c

Browse files
fix: web socket server closing
1 parent bfb9137 commit b122e1c

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
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
}

test/e2e/hot-and-live-reload.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ describe('hot and live reload', () => {
6969
hot: true,
7070
},
7171
},
72-
// "ws" web socket serve
72+
// "ws" web socket server
7373
{
7474
title: 'should work and refresh content using hot module replacement',
7575
options: {
@@ -117,7 +117,7 @@ describe('hot and live reload', () => {
117117
hot: true,
118118
},
119119
},
120-
// "sockjs" web socket serve
120+
// "sockjs" web socket server
121121
{
122122
title: 'should work and refresh content using hot module replacement',
123123
options: {
@@ -200,6 +200,7 @@ describe('hot and live reload', () => {
200200
await new Promise((resolve, reject) => {
201201
server.listen(devServerOptions.port, devServerOptions.host, (error) => {
202202
if (error) {
203+
console.log(error);
203204
reject(error);
204205

205206
return;
@@ -214,6 +215,7 @@ describe('hot and live reload', () => {
214215
.get('/main')
215216
.expect(200, (error) => {
216217
if (error) {
218+
console.log(error);
217219
reject(error);
218220

219221
return;

0 commit comments

Comments
 (0)