Angular4 Observable 订阅 ServiceStack 服务器事件
Angular4 Observable Subscription to ServiceStack Server Events
我们有一个 Angular 1 应用程序,每隔几秒轮询一次 ServiceStack web API,作为升级到 Angular 4 的一部分,我想将其换成对 ServiceStack 的服务器事件的 rxjs 可观察订阅。
有谁知道这是否可行,或者我应该只使用 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,建议使用 TypeScript Server Events Client
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 的最佳方式。
我们有一个 Angular 1 应用程序,每隔几秒轮询一次 ServiceStack web API,作为升级到 Angular 4 的一部分,我想将其换成对 ServiceStack 的服务器事件的 rxjs 可观察订阅。
有谁知道这是否可行,或者我应该只使用 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,建议使用 TypeScript Server Events Client 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 的最佳方式。