Я пытаюсь создать наблюдаемое с помощью Rx.Subject, которое будет подписываться несколькими компонентами.
У меня есть WebsocketService:
export class WebsocketService {
private ws = null;
private subject: Rx.Subject<{}>;
constructor() {
}
public connect(url): Rx.Subject<{}> {
if (!this.subject) {
this.subject = this.create(url);
console.log('Successfully connected: ' + url);
} else {
console.log('Already connected: ' + url);
}
return this.subject;
}
private create(url): Rx.Subject<MessageEvent> {
if (this.ws === null) {
console.log('Connected to WS');
this.ws = new WebSocket(url);
} else {
console.log('Already connected to WS');
}
const observable = Rx.Observable.create(
(obs: Rx.Observer<MessageEvent>) => {
this.ws.onmessage = obs.next.bind(obs);
this.ws.onerror = obs.error.bind(obs);
this.ws.onclose = obs.complete.bind(obs);
return this.ws.close.bind(this.ws);
});
return Rx.Subject.create({}, observable);
}
}
И два компонента, которые подписываются внутри одинаковым образом:
// ...
constructor(private stationService: StationService, private websocketService: WebsocketService) {
websocketService.connect('ws://localhost:8080/ws')
.subscribe(msg => {
console.log(msg);
console.log('[Dashboard] Response from websocket: ' + msg.data);
});
}
// ...
И второе:
// ...
constructor(private http: HttpClient, private websocketService: WebsocketService) {
websocketService.connect('ws://localhost:8080/ws')
.subscribe(msg => {
console.log(msg);
console.log('[Station] Response from websocket: ' + msg.data);
});
}
// ...
Мы обновляем, два компонента вызывают мою службу:
Подключено к WS websocket.service.ts: 26: 12 Успешно подключено: ws: // localhost: 8080 / ws websocket.service.ts: 17: 12 Уже подключено: ws: // localhost: 8080 / ws
Но когда я отправляю что-то одно сокет, яесть только один подписчик, который отвечает:
[Dashboard] Ответ от websocket: qwerty
Кто-то, кто позвонил, поможет мне найти мою ошибку?
Спасибо,