使用fromEvent可观察和套接字名称空间更新ChatView

时间:2019-11-08 18:17:51

标签: node.js angular sockets socket.io

我正在尝试使用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,看到消息正在发送到服务器,但是没有返回到客户端?

有人有什么建议吗?

先谢谢了。

0 个答案:

没有答案