У меня проблема с угловым сервисом с socket.io.Служба push-данных только для просмотра, не иначе.Но моя проблема в том, как создать наблюдаемое.Должен ли он быть, например, только один или для каждой подписки новый Observable?
Первый вариант
export class MessageService {
socket: SocketIOClient.Socket;
observable: Observable<any>;
subject: Subject<any>;
constructor() {
this.subject = new Subject();
this.observable = new Observable<any>(this.subscribe.bind(this));
}
init() {
if (!this.socket) {
this.socket = io('http://localhost:3000');
this.socket.on('message', (res) => {
this.subject.next(res);
});
}
}
getMessage(): Observable<any> {
this.init();
return this.observable;
}
private subscribe(subscriber: Subscriber<any>) {
this.subject.subscribe(subscriber);
}
}
Второй вариант
export class MessageService {
socket: SocketIOClient.Socket;
observable: Observable<any>;
subject: Subject<any>;
constructor() {
this.subject = new Subject();
}
init() {
if (!this.socket) {
this.socket = io('http://localhost:3000');
this.socket.on('message', (res) => {
this.subject.next(res);
});
}
}
getMessage(): Observable<any> {
this.init();
return new Observable<any>(subscriber => {
this.subject.subscribe(subscriber);
});
}
}
Какой вариант является оптимальным, быстрее,более безопасный способ сделать это.Или я что-то не так поняла в наблюдаемых?