我正在尝试使用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: {} });
}
}
在客户端,我正在使用我的ChatService类中创建一个Observable,该类可侦听服务器中的“ 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) { }
....
然后在我的chatFeed中订阅了这个Observable“ newMessage”,只要我不在套接字上使用名称空间/ chat,它就可以正常工作。 这是我订阅可观察的代码
ngOnInit() {
this.chatService.getMessages();
this.runningChatSub = this.chatService.newMessage.subscribe((newMsg) => {
console.log('IS IN SUBSCRIPTION ! ');
this.feed.push(newMsg);
});
}
现在看来,服务器只是没有达到我的客户端上可观察到的“ newMessage”。 我创建了一些console.logs,看到消息正在发送到服务器,但是没有返回到客户端?
有人有什么建议吗?
先谢谢了。