2017-06-30 2 views
2

Wir haben eine Angular 1-Anwendung, die alle paar Sekunden eine ServiceStack-Web-API abfragt. Im Rahmen des Upgrades auf Angular 4 möchte ich dies für ein beobachtbares rxjs-Abonnement von ServiceStack Server austauschen Veranstaltungen.Angular4 Observable-Abonnement für ServiceStack-Serverereignisse

Weiß jemand, ob dies möglich ist oder sollte ich nur ss-utils für mein Abonnement verwenden?

Antwort

2

Für Angular4 wird empfohlen TypeScript Server Events Client im servicestack-client npm package die für alle Server-Ereignisse API High-Level-ServiceStack Zugang zu nutzen bietet.

könnten Sie möglicherweise Observablen erstellen für jedes der Ereignisse, die Sie interessiert sind, z:

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(); 

Aber ich bin nicht vertraut genug mit RxJS zu wissen, ob dies der beste Weg ist RxJS zu verwenden.

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