Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Trabalhando com WebSocket e Observables

Olá,

Estou entrando no mundo do RxJS para entender como ele pode solucionar problemas do nosso cotidiano.

A ideia da "reatividade" é muito interessante, porém gostaria de entender um pouco melhor em relação a reatividade com o servidor.

Tenho o seguinte cenário de aplicação:

Um aplicativo, que é uma especie de um banco. Onde cada usuário tem um extrato de transações e pode transferir valores para outros usuários. Eu gostaria que, quano o usuário A transferisse algum valor para o usuário B, este venha ser notificado em tempo real.

A melhor solução para isso é o socket.io? Qual a melhor forma (Angular e NodeJS) para trabalhar com esse tipo de situação?

Algo assim no Angular?

  getTransacoes() {
    let observable = new Observable(observer => {
      this.socket = io(this.url);
      this.socket.on('transacao', (data) => {
        observer.next(data);
      });
      return () => {
        this.socket.disconnect();
      };
    })
    return observable;
  }
3 respostas

Me parece ser um código válido sim, aliás, se funcionar (não testei aqui), muito elegante.

Em tempo real é o socket.io sim. Ele é uma camada que envolve o websocket garantindo que seu código funcione nos mais diversos navegadores e adiciona coisas extras.

solução!

No caso, nem precisa usar o this.socket, pode usar uma variável padrão. Por causa da closure, o observable lembrará do contexto no qual a variável foi declarada.

getTransacoes() {
    let observable = new Observable(observer => {
      let socket = io(this.url);
      socket.on('transacao', (data) => {
        observer.next(data);
      });
      return () => {
        socket.disconnect();
      };
    })
    return observable;
  }

Mas desse jeito, quem chamar o observable, não terá acesso ao socket. Mas não vejo motivo para ter.

Ótimo Flávio,

Obrigado pela dica.