Angular 6 socket.io, как создать наблюдаемый сервис? - PullRequest
0 голосов
/ 24 октября 2018

У меня проблема с угловым сервисом с 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);
    });
}
}

Какой вариант является оптимальным, быстрее,более безопасный способ сделать это.Или я что-то не так поняла в наблюдаемых?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...