отдельная комната для одного пользователя в socket.io - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над nodejs и angularjs.Я использую socket.io, чтобы показать прогресс текущего процесса.

На стороне клиента

let socket = io.connect();
socket.emit('room',{roomId:user_id});

socket.on('data',function(data){
 console.log("data -=- ",data);
})

на стороне сервера

io.on('connection',function(socket){
  socket.on('disconnect', function(de) {
    console.log("disconnected",de)
  });
  socket.on('room',function(d){
    socket.join(d.roomId);
  })
})

app.use(function(req,res,next){
 req.io = io; next();
});

Я отправляю roomId смой почтовый запрос в теле;Когда вызывается API, я собираю roomId из req.body и затем генерирую событие.

req.io.sockets.in(roomId).emit('data',{roomId:roomId,msg:'message'});

Когда я запускаю это на локальном хосте для одного пользователя, оно работает правильно.Но когда я вызываю API, который генерирует событие для двух отдельных пользователей с отдельным roomId.Пользователь, который запрашивает первым, ничего не получает.

Если пользователь user1 с roomId = 1 подключается непосредственно перед user2 с roomId = 2, то user1 не получает событие «data».Только user2 получает его.

Я не мог найти никакого решения для этого.Что я здесь не так делаю?Пожалуйста, помогите.

1 Ответ

0 голосов
/ 01 февраля 2019

Посмотрев на это, я узнал, что вы все делаете правильно, проблема, которая происходит, как я думаю, req.body Я думаю, что вы просто сохраняете roomID последнего пользователя, поэтому, когда вы вызываете метод emitоно всегда запускает событие только в одну комнату

req.io.sockets.in(roomId).emit('data',{roomId:roomId,msg:'message'});

Чтобы отправить события двум разным пользователям, ваш номер комнаты должен быть изменен для каждого пользователя в целях тестирования, используйте для проверки 2 разных браузера

Дайте мне знать, если вам нужна дополнительная помощь

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