При обновлении страницы io.on('connection') запускается несколько раз. Почему?

const models = require('../models/models.js');
const path = require('path');
let user = false;




module.exports = function (app,passport,io, req, res) {
    let users={};
    let keys={};


    io.on('connection', function(socket){
        user = req.user;

        console.log('Пользователь ' + user.email + ' подключился!');

        users[user.email] = socket.id;
        keys[socket.id] = user.email;

        //Отлючение пользователя
        socket.on('disconnect', function(){
            console.log('Отлючение ' + user.email);
            delete users[keys[socket.id]];
            delete keys[socket.id];
        });
    });

};


То есть при открытии страницы я вижу в консоли:
Пользователь user подключился!


При обновлении страницы:

Отключение user


Пользователь user подключился!
Пользователь user подключился!


При повторном обновлении 2 отключения, 3 подключения,
потом 3 отключения 4 подключения. и тд

Контроллер в котором у меня io.connect я подключил так:
app.get('/chat', isLoggedIn, function(req, res) {
        require('./controller/controller.js')(app,passport,io, req, res);
        res.render('chat.ejs');
    });


Почему после перезагрузки страницы socket.io вызывает connect callback несколько раз?
Вот тоже самое. Но ответа там нет
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Каждый раз при коннекте создаётся новый прослушивальщик дисконнекта.
Как минимум его надо вытащить из on('connection').

На клиенте аналогично проверить чтобы не было никаких on() в других.

require('./controller/controller.js')(app,passport,io, req, res);

И конечно же подключение модуля при каждом запросе добавляет каждый раз прослушку событий.
Очень странный код, почему всё в кучу смешано и сокет сервер и обычный сервер.

Выносите сокет сервер отдельно. По роуту только верстку со скриптами отдавайте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 20:44
500 руб./за проект
07 мая 2024, в 20:21
900000 руб./за проект
07 мая 2024, в 19:52
50000 руб./за проект