From 036a825892814505902fe5f124a473afc51fefec Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 12 Jan 2022 21:46:56 +0000 Subject: [PATCH] Only setup ws client heartbeat once it is connected Fixes #3264 --- .../nodes/core/network/22-websocket.js | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/22-websocket.js b/packages/node_modules/@node-red/nodes/core/network/22-websocket.js index 3373c6e72..13949b251 100644 --- a/packages/node_modules/@node-red/nodes/core/network/22-websocket.js +++ b/packages/node_modules/@node-red/nodes/core/network/22-websocket.js @@ -105,22 +105,24 @@ module.exports = function(RED) { if (node.isServer) { node._clients[id] = socket; node.emit('opened',{count:Object.keys(node._clients).length,id:id}); - } else { - if (node.heartbeat) { - node.heartbeatInterval = setInterval(function() { - if (socket.nrPendingHeartbeat) { - // No pong received - socket.terminate(); - socket.nrErrorHandler(new Error("timeout")); - return; - } - socket.nrPendingHeartbeat = true; - socket.ping(); - },node.heartbeat); - } } socket.on('open',function() { if (!node.isServer) { + if (node.heartbeat) { + clearInterval(node.heartbeatInterval); + node.heartbeatInterval = setInterval(function() { + if (socket.nrPendingHeartbeat) { + // No pong received + socket.terminate(); + socket.nrErrorHandler(new Error("timeout")); + return; + } + socket.nrPendingHeartbeat = true; + try { + socket.ping(); + } catch(err) {} + },node.heartbeat); + } node.emit('opened',{count:'',id:id}); } });