繁体   English   中英

Angular4可观察到的ServiceStack Server事件订阅

[英]Angular4 Observable Subscription to ServiceStack Server Events

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

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

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

对于Angular4,建议在servicestack-client npm软件包中使用TypeScript Server Events Client ,该软件包提供对所有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的最佳方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM