Skip to content

Commit f8998f6

Browse files
committed
Fix: Close all keepalive intervals when the server stops
1 parent 38d3582 commit f8998f6

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

hapi-plugin-websocket.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ const register = async (server, pluginOptions) => {
114114
/* the global WebSocket server instance */
115115
let wss = null
116116

117+
/* per-route timers */
118+
const routeTimers = {}
119+
120+
117121
/* perform WebSocket handling on HAPI start */
118122
server.ext({ type: "onPostStart", method: (server) => {
119123
/* sanity check all HAPI route definitions */
@@ -149,9 +153,6 @@ const register = async (server, pluginOptions) => {
149153
/* per-route peer (aka client) tracking */
150154
const routePeers = {}
151155

152-
/* per-route timers */
153-
const routeTimers = {}
154-
155156
/* on WebSocket connection (actually HTTP upgrade events)... */
156157
wss.on("connection", async (ws, req) => {
157158
/* find the (previously already successfully matched) HAPI route */
@@ -343,8 +344,14 @@ const register = async (server, pluginOptions) => {
343344

344345
/* perform WebSocket handling on HAPI stop */
345346
server.ext({ type: "onPreStop", method: (server, h) => {
346-
/* close WebSocket server instance */
347347
return new Promise((resolve /*, reject */) => {
348+
// Stop all keepalive intervals
349+
for (const routeId of Object.keys(routeTimers)) {
350+
clearInterval(routeTimers[routeId]);
351+
delete routeTimers[routeId];
352+
}
353+
354+
/* close WebSocket server instance */
348355
if (wss !== null) {
349356
/* trigger the WebSocket server to close everything */
350357
wss.close(() => {

0 commit comments

Comments
 (0)