Я создал угловое приложение и хочу интегрировать сокет 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 раз.
Что не так в моей реализации?