【问题标题】:Angular4 Observable Subscription to ServiceStack Server EventsAngular4 对 ServiceStack 服务器事件的可观察订阅
【发布时间】:2017-06-30 19:22:00
【问题描述】:

我们有一个 Angular 1 应用程序,它每隔几秒轮询一次 ServiceStack Web API,作为升级到 Angular 4 的一部分,我想将它换成 rxjs 可观察订阅 ServiceStack 的服务器事件。

有谁知道这是否可行,或者我是否应该只使用 ss-utils 进行订阅?

【问题讨论】:

    标签: angular servicestack rxjs angular2-observables


    【解决方案1】:

    对于 Angular4,建议在 servicestack-client npm package 提供对所有 ServiceStack 高级服务器事件 API 的访问。

    您可能会为您感兴趣的每个事件创建可观察对象,例如:

    var onMessage, onException, onJoin, CustomMessage;
    
    let onMessage$ = Observable.create((observer) => {
       onMessage = (msg:ServerEventMessage) => {
          this.zone.run(() => observer.next(msg));
       };
       onException = (e:Error) => observer.error(error);
    }
    
    let onJoin$ = Observable.create((observer) => {
       onJoin = (msg:ServerEventJoin) => {
          this.zone.run(() => observer.next(msg));
       };
    }
    
    let customMessage$ = Observable.create((observer) => {
       CustomMessage = (msg:CustomMessage) => {
          this.zone.run(() => observer.next(msg));
       };
    }
    
    const client = new ServerEventsClient("/", channels, {
        handlers: {
            onConnect: (sub:ServerEventConnect) => {  // Successful SSE connection
                console.log("You've connected! welcome " + sub.displayName);
            },
            onJoin,
            onMessage,
            CustomMessage
        },
        onException
     })
    .start(); 
    

    但我对 RxJS 不够熟悉,不知道这是否是使用 RxJS 的最佳方式。

    【讨论】:

      【解决方案2】:
      let serverEvent$ = Observable.create(
                          (observer) => {
                            let eventSource = this.sseService.createEventSource('http://localhost:8080/servereventapi');
                            eventSource.onmessage = (event) => {
                                this.zone.run(() => observer.next(JSON.parse(event.data)));
                            };
                            eventSource.onerror = (error) => observer.error(error);
                        });
      
      //subscribe to the event
      

      【讨论】:

      • 你好,请给个完整的例子
      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多