Присоединяйтесь к комнате Socket.io, просматривая список сокетов - PullRequest
0 голосов
/ 07 января 2020

Пожалуйста, прости меня, если я чего-то не понимаю, я не лучший в этом, и я учу себя, как я go.

Я сейчас создаю приложение, используя Node.js, express, Socket.io (с сессиями и рукопожатием), Mongodb, Handlebars и несколько других вещей. У меня возникли проблемы с решением этой проблемы, и я надеялся, что кто-нибудь сможет помочь мне с этим.

Я смог заставить клиента присоединиться к комнате традиционным способом (когда пользователь загружает страница, из которого выдается излучение от клиента, полученное из бэкэнда):

io.sockets.on('connection', function (client) {
    client.on('join', function (id) {
        client.join(id);
    });
});

Однако это создает кучу дополнительной работы для моего бэкэнда (проверка, действительно ли пользователь может просмотреть content, et c), что требует некоторых обращений к базе данных. Вся эта работа уже выполняется всякий раз, когда страница загружается, и не было бы смысла делать это дважды, поэтому я пытался придумать, как заставить сокет-клиента входить в комнату, когда страница загружается после вся работа уже сделана.

Я пробовал это (вдохновленный { ссылка }):

router.get('/example', function (req, res, next) {
    //Check whether user can view content, perform database calls, and do other work here

    //This is run after everything else, right before page rendering:
    if (req.session.userId) {
        for (let i in io.sockets.connected) {
            if (req.session.userId == io.sockets.connected[i].handshake.session.userId) {
                io.sockets.connected[i].join("room_name")
            }
        }
    }
});

Однако по какой-то причине это не работает. Нет никаких ошибок или чего-то еще, но пользователь не получает никаких дополнительных излучений от созданного серверного модуля. Я думаю, что я делаю что-то не так, но я не уверен, что. Разве это не правильный способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...