Я пытаюсь реализовать приложение чата в реальном времени, используя ngx-socket-io и пространства имен, но все еще есть проблема, которую я просто не могу обойти.
Когда я работал с сокетом без пространств имен, все работало нормально. Теперь я создал разные пространства имен и через чат-окна не обновляется, как только я отправляю сообщение.
Логика сервера выглядит следующим образом
// Chat namespace
io.of('/chat').on('connection', (socket) => {
console.log('Socket connected on server');
socket.on('new-message', (message) => {
console.log('Received new message ' + message);
io.emit("ChatMessage", message);
});
});
На стороне клиента я создал собственный класс ChatSocket, который предоставляется в файле app.module
@Injectable()
export class ChatSocket extends Socket {
constructor() {
super({ url: 'http://localhost:3000/chat', options: {} });
}
}
Вкл. на стороне клиента я использую создание Observable в моем классе ChatService, который прослушивает событие "ChatMessage" с сервера.
@Injectable({providedIn: 'root'})
export class ChatService {
private chatMessages: ChatMessage[] = [];
private users: User[] = [];
private userLoggedListener = new Subject<User[]>();
private chatUpdated = new Subject<ChatMessage[]>();
**newMessage = this.socket.fromEvent<ChatMessage>('ChatMessage')**;
constructor(private http: HttpClient, private router: Router, public socket: ChatSocket) { }
....
Это наблюдаемое "newMessage" затем подписывалось в моем chatFeed и работало нормально, пока я не использовал пространство имен / chat в своем сокете. Это код, где я подписываюсь на наблюдаемую
ngOnInit() {
this.chatService.getMessages();
this.runningChatSub = this.chatService.newMessage.subscribe((newMsg) => {
console.log('IS IN SUBSCRIPTION ! ');
this.feed.push(newMsg);
});
}
Теперь кажется, что Сервер просто не достигает наблюдаемого "newMessage" на моем Клиенте. Я создал несколько console.logs и увидел, что сообщение отправляется на сервер, но не возвращается клиентам?
У кого-нибудь есть предложения?
Заранее спасибо.