From 087f504a833516f72c110dd47ab5314a7b44246f Mon Sep 17 00:00:00 2001 From: Steffen Date: Thu, 4 Jun 2020 21:44:25 +0200 Subject: [PATCH] added socket timeout --- server/index.js | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/server/index.js b/server/index.js index a61a557..7c9cd4a 100644 --- a/server/index.js +++ b/server/index.js @@ -7,17 +7,24 @@ const server = https.createServer({ key: fs.readFileSync("key.pem") }); const wss = new WebSocket.Server({ - server, - // port: 8081, + ...(process.env.NODE_ENV === "development" ? { port: 8081 } : { server }), verifyClient: info => !!info.origin.match(/^https?:\/\/(bra1n\.github\.io|localhost)/i) }); +function noop() {} + +function heartbeat() { + this.isAlive = true; +} + wss.on("connection", function connection(ws, req) { ws.channel = req.url .split("/") .pop() .toLocaleLowerCase(); + ws.isAlive = true; + ws.on("pong", heartbeat); ws.on("message", function incoming(data) { if (!data.match(/^\["ping/i)) { console.log(ws.channel, wss.clients.size, data); @@ -34,4 +41,18 @@ wss.on("connection", function connection(ws, req) { }); }); -server.listen(8080); +const interval = setInterval(function ping() { + wss.clients.forEach(function each(ws) { + if (ws.isAlive === false) return ws.terminate(); + ws.isAlive = false; + ws.ping(noop); + }); +}, 30000); + +wss.on("close", function close() { + clearInterval(interval); +}); + +if (process.env.NODE_ENV !== "development") { + server.listen(8080); +}