2017-06-30 125 views
2

我们有一个Angular 1应用程序,每隔几秒轮询一次ServiceStack Web API,并将其作为Angular 4升级的一部分我希望将它交换为ServiceStack服务器的rxjs可观察订阅活动。Angular4 Observable订阅ServiceStack服务器事件

有没有人知道这是可能的,或者我应该只是使用ss-utils为我的订阅?

回答

2

对于Angular4我们建议在 servicestack-client npm package它提供了访问所有ServiceStack高层服务器事件API的使用TypeScript Server Events Client

你可能会为每一个你感兴趣的事件的观测,e.g:

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