RxJs observáveis com WebSocket

Meu aplicativo angular usa um soquete da web para se comunicar com o back-end.

No meu caso de teste, tenho 2 componentes de cliente. O timer Observable imprime dois IDs de cliente diferentes conforme o esperado.

Cada ngOnInit () também imprime o ID do seu cliente.

AGORA, por algum motivo, a assinatura do websocketService.observeClient () é chamada duas vezes para cada mensagem, masthis.client.id sempre imprime o valor do segundo cliente.

Heres meu componente cliente

@Component({
...
})
export class ClientComponent implements OnInit {

  @Input() client: Client;

  constructor(public websocketService: WebsocketService) {
    Observable.timer(1000, 1000).subscribe(() => console.log(this.client.id));
  }

  ngOnInit() {

    console.log(this.client.id);
    this.websocketService.observeClient().subscribe(data => {
      console.log('message', this.client.id);
    });

  }

}

E o meu serviço websocket

@Injectable()
export class WebsocketService {

  private observable: Observable<MessageEvent>;
  private observer: Subject<Message>;

  constructor() {

    const socket = new WebSocket('ws://localhost:9091');

    this.observable = Observable.create(
      (observer: Observer<MessageEvent>) => {
        socket.onmessage = observer.next.bind(observer);
        socket.onerror = observer.error.bind(observer);
        socket.onclose = observer.complete.bind(observer);
        return socket.close.bind(socket);
      }
    );

    this.observer = Subject.create({
      next: (data: Message) => {
        if (socket.readyState === WebSocket.OPEN) {
          socket.send(JSON.stringify(data));
        }
      }
    });

  }

  observeClient(): Observable<MessageEvent> {
    return this.observable;
  }

}

Editar

Ok, até onde eu li, tem a ver com o fato de que os Observables são objetos unicast e eu tenho que usar um Assunto para isso, mas não sei como criar o Assunto.

questionAnswers(0)

yourAnswerToTheQuestion