Пожалуйста, мне нужно пояснение к этому коду (использование Socket.io с Angular) - PullRequest
0 голосов
/ 08 сентября 2018

Я использовал этот код в своем угловом коде, но на самом деле не понимаю его, потому что видел его на веб-сайте, в нем я:

Создано две службы, которые называются WebSocket Service и NewsFeed

Я знаю, это похоже на безумие, но терпите меня.

Существенные места, которые я не понимаю, включают:

 Rx.Subject<MessageEvent>

И как здесь работают наблюдатель и наблюдаемая

В сущности, я пытаюсь создать новостную ленту, используя WebSockets

import { Injectable } from '@angular/core';
import * as io from 'socket.io-client';
import { Observable } from 'rxjs/Observable';
import * as Rx from 'rxjs/Rx';
import { environment } from '../../environments/environment';


@Injectable({
  providedIn: 'root'
})
export class WebSocketService {

  // Socket Connection

  private socket;

  constructor() { }

  connect(): Rx.Subject<MessageEvent> {

    this.socket = io('http://localhost:3000');

    /**  Define Observable which will observe any incoming messages
    from socket.io server */

    let observable = new Observable(observer => {
      this.socket.on('message',(data) => {
      console.log('Recieved message from Websocket Server')
      observer.next();
      })
      return () => {
        this.socket.disconnect();
      }

    });

    // We define our Observer which will listen to messages
    // from our other components and send messages back to our
    // socket server whenever the `next()` method is called.

    let observer = {
      next: (data: Object) => {
        this.socket.emit('message',JSON.stringify(data));
      }

    };
    // Return Rx.Subject which is a combination of both an observable and observer

    return Rx.Subject.create(observer,observable);
  }
}

Служба новостной ленты

import { Injectable } from '@angular/core';
import { WebSocketService } from './web-socket.service';
import { Observable, Subject } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class NewsFeedService {

  feeds: Subject<any>;

  constructor(private wsService: WebSocketService) { 
    this.feeds = <Subject<any>>wsService
      .connect()
      .map((response: any): any => {
        return response;
      })
  }
  sendMsg(msg){
    this.feeds.next(msg);
  }

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