Socket.io и Angular 8 - клиент получает сообщение несколько раз - PullRequest
0 голосов
/ 24 октября 2019

Я создал угловое приложение и хочу интегрировать сокет io там сейчас. При запуске приложения я устанавливаю соединение с веб-сервером, которое снова закрывается, когда пользователь закрывает приложение.

выдержка из app.component.ts:

  ngOnInit(): void {
    this.chatSocket.connect();
  }

  @HostListener('window:beforeunload', [ '$event' ])
  beforeUnloadHander(event) {
    this.chatSocket.disconnect();
  }

chatSocketВыдает только соответствующее событие.

В приложении есть возможность общаться в группах с другими пользователями. Пользователь может выбрать, к какому чату он хочет присоединиться, из списка доступных чатов. Если он выбрал один чат, он присоединяется к socket.io-room и может отправлять сообщения.

выдержка из chatwindow.component.ts:

constructor(...){
  ...
  this.chatSocket.join(this.thread.getThreadId());
  this.chatSocket.receiveMessage();
}

ngOnDestroy(): void {
  this.chatSocket.leave(this.thread.getThreadId());
}

send(...) {
  ...
  const data: any = {
    room: this.thread.getThreadId(),
    msg: message
  };
  this.chatSocket.sendMessage(data);
}

мой сервер структурирован какследует:

io.on('connection', socket => {

    socket.on('joinRoom', room => {
        socket.join(room);
    });

    socket.on('leaveRoom', room =>{
        socket.leave(room);
    });

    socket.on('disconnect', function() {
    });

    socket.on('sendMsg', data => {
        message.createMsg(data.msg, function(err, response){ //stores the message in a database
            if(err){
                console.log('an error occurred',response);
            }else{
                io.to(data.room).emit('receiveMsg', data.msg.text);
            }
        });
    });
});

пока все хорошо ... Моя проблема в том, что это не работает. : - \

Во-первых, сообщения отправляются не только группе, но и всем пользователям, которые находятся в сети.

И, во-вторых, когда пользователь меняет номера n раз, он илиона получает сообщения n раз.

Что не так в моей реализации?

...