1
RxJsとWebSocketを使用して、私はサーバからデータを受信し、私のプログラムのサービスの購読者に送ると思われるいくつかのサービスを作成しました。サービスが1つしかなかった場合は問題はありませんでしたが、2つ目のサービスを作成した後、最初のサービスは応答をもう受信しません。どうすればそれが確実になるのですか?1人のサブスクライバだけがサーバからの応答を受け取ります
import { Injectable } from '@angular/core';
import * as Rx from 'rxjs/Rx';
@Injectable()
export class WebSocketService {
private subject: Rx.Subject<MessageEvent>;
public connect(url): Rx.Subject<MessageEvent> {
if (!this.subject) {
this.subject = this.create(url);
}
return this.subject;
}
private create(url): Rx.Subject<MessageEvent> {
let ws = new WebSocket(url);
let observable = Rx.Observable.create(
(obs: Rx.Observer<MessageEvent>) => {
ws.onmessage = obs.next.bind(obs);
ws.onerror = obs.error.bind(obs);
ws.onclose = obs.complete.bind(obs);
return ws.close.bind(ws);
})
let observer = {
next: (data: Object) => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify(data));
}
}
}
return Rx.Subject.create(observer, observable);
}
}
そして、この私のカウントダウンサービス:他のサービスはカウントダウンサービスとしてではなく、他の変数と同じように実装されている
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs/Rx';
import {WebSocketService } from './websocket.service';
const AUCTION_URL = 'ws://localhost:9999';
export interface Countdown {
days: number,
hours: number,
minutes: number,
seconds: number
}
@Injectable()
export class CountdownService {
public countdowns: Subject<Countdown>;
constructor(wsService: WebSocketService) {
this.countdowns = <Subject<Countdown>>wsService
.connect(AUCTION_URL)
.map((response: MessageEvent): Countdown => {
let data = JSON.parse(response.data);
return {
days: data.days,
hours: data.hours,
minutes: data.minutes,
seconds: data.seconds
}
});
}
}
は、ここに私のWebSocketサービスです。
ご協力いただきありがとうございます。
感謝を。 (SystemJS)wsServiceが定義されていません(...) – Jesper
this.wsServiceを使用する必要があります – bendyourtaxes
このエラーが発生しました: (SystemJS)未定義のプロパティ 'connect'を読み取ることができません。 (···) – Jesper