Пожалуйста, прости меня, если я чего-то не понимаю, я не лучший в этом, и я учу себя, как я 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")
}
}
}
});
Однако по какой-то причине это не работает. Нет никаких ошибок или чего-то еще, но пользователь не получает никаких дополнительных излучений от созданного серверного модуля. Я думаю, что я делаю что-то не так, но я не уверен, что. Разве это не правильный способ сделать это?