У меня есть приложение, которое использует подключение через веб-сокет для отправки некоторых данных во внешний интерфейс после загрузки страницы. Я использую переменную locals express для передачи сервера websocket на маршрутизатор.
Это настройка сокета:
//certificate
var key = fs.readFileSync('encryption/cert.key');
var cert = fs.readFileSync('encryption/cert.pem');
var options = { key: key, cert: cert, passphrase: 'kevinius', requestCert: false, rejectUnauthorized: false };
//create server
const server = https.createServer(options, app).listen(process.env.PORT || 8080, (err)=>{
console.log(`Listening on: https://localhost:${process.env.PORT}`)
});
// websocket
let wss = new WebSocket({ server });
app.locals.socket = wss;
Настройка маршрутизатора:
router.get('/', function (req, res, next) {
var socket = req.app.locals.socket;
console.log('yesssssss')
socket.on('connection', (ws) => {
//this keeps on adding new eventListeners resulting in MaxListenersExceededWarning
console.log('connection');
ws.send(JSON.stringify(['cover', htmlTemplate]), (err) => {
//
});
})
}
Однако это приводит к тому, что при каждом обновлении новой страницы добавляется несколько EventListener :
yesssssss
connection
yesssssss
connection
connection
yesssssss
connection
connection
connection
В конечном итоге приводит к этой ошибке: :
(node:15515) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 message listeners added. Use emitter.setMaxListeners() to increase limit
Так чего не хватает в моей настройке? Thx,