Ben gelen mesajları websocket almak ve bu alınan iletileri dayalı bir web sayfasını güncelleştirmek için Angular2 kullanacağım. Şu anda, bir kukla echo websocket servisi kullanıyorum ve yerini alacak.Angular2/Websocket: gelen websocket mesajları için gözlenebilir bir geri dönmek nasıl
Anlayışımdan, websocket mesajlarını alan işlevin, web sayfasını güncelleyebilecek bir işleyici tarafından izlenen bir gözlemlenebilir döndürmesi gerekir. Ama gözlemlenebilir bir şekilde nasıl döneceğimi anlayamıyorum.
Kod pasajı aşağıya eklenmiştir. MonitorService
, bir web bağlantısı bağlantısı oluşturur ve alınan mesajları içeren bir gözlemlenebilir döndürür. Aşağıda
@Injectable()
export class MonitorService {
private actionUrl: string;
private headers: Headers;
private websocket: any;
private receivedMsg: any;
constructor(private http: Http, private configuration: AppConfiguration) {
this.actionUrl = configuration.BaseUrl + 'monitor/';
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.headers.append('Accept', 'application/json');
}
public GetInstanceStatus =(): Observable<Response> => {
this.websocket = new WebSocket("ws://echo.websocket.org/"); //dummy echo websocket service
this.websocket.onopen = (evt) => {
this.websocket.send("Hello World");
};
this.websocket.onmessage = (evt) => {
this.receivedMsg = evt;
};
return new Observable(this.receivedMsg).share();
}
}
buna web sayfaları üzerinde ve güncellemeler döndü gözlemlenebilir abone başka bileşenidir.
export class InstanceListComponent {
private instanceStatus: boolean
private instanceName: string
private instanceIcon: string
constructor(private monitor: MonitorService) {
this.monitor.GetInstanceStatus().subscribe((result) => {
this.setInstanceProperties(result);
});
}
setInstanceProperties(res:any) {
this.instanceName = res.Instance.toUpperCase();
this.instanceStatus = res.Status;
if (res.Status == true)
{
this.instanceIcon = "images/icon/healthy.svg#Layer_1";
} else {
this.instanceIcon = "images/icon/cancel.svg#cancel";
}
}
}
Şimdi, tarayıcı konsoluna TypeError: this._subscribe is not a function
Teşekkürler! Ve böyle gözle görülür şekilde geri dönenlerin de çalışabilmesi de gözardı: “Gözlemlenebilir.FromEvent (websocket, 'message');” Farkları hakkında herhangi bir fikriniz var mı? –
@BingLu Neredeyse aynılar. 'FromEvent' yolu, etkinlik için sadece bir sarıcıdır, cevabımda yaptığım şey budur. Herhangi bir fark olduğundan şüphe duyuyorum. Ama yine de cevabımdan daha iyi bir yol: D. Bunu eklemek için cevabımı güncelleyeceğim. Teşekkürler – Abdulrahman
@Abdulrahman Biliyorum çok uzun zaman önceydi, ama Plunker'ı 'fromEvent' kullanmak için güncelleyip güncelleyemeyeceğinizi merak ediyorum. Btw, akış verileri için WebSocketSubject' kullanılmamalıdır? (Sadece merak ediyorum, websockets için yeniyim). – brians69