Проблема в том, что Вы не проверяете, живо ли соединение, перед тем, как послать в него данные. Для нахождения проблемы не хватает глубины вывода стека, добавьте ключик при запуске ноды node --stack-trace-limit=1000 application.js и там будет видно и из какого места Вашего кода это вызывается. Нужно ловить ws.on('close', fn) и ws.on('error', fn) и удалять эти сокеты из множества, по которому Вы проходитесь в цикле и рассылаете, дополнительно можно и проверку поставить типа if (connection.readyState === WebSocket.OPEN) ...