我正在尝试在Angular项目中创建WebSocket服务类。我遵循了多个教程,但没有人工作。目前我正在尝试实现以下Link,但它仍然抛出错误。
还有,是否有更好的方法在angular 15中实现WebSocket服务?
WebSocket服务类:
// src\app\services\websocket.service.ts
import { Injectable } from "@angular/core";
import { Observable, Observer } from 'rxjs';
import { AnonymousSubject } from 'rxjs/internal/Subject';
import { Subject } from 'rxjs';
import { map } from 'rxjs/operators';
const CHAT_URL = "ws://localhost:5000";
export interface Message {
source: string;
content: string;
}
@Injectable()
export class WebsocketService {
private subject: AnonymousSubject<MessageEvent> | undefined;
public messages: Subject<Message>;
constructor() {
this.messages = <Subject<Message>>this.connect(CHAT_URL).pipe(
map(
(response: MessageEvent): Message => {
console.log(response.data);
let data = JSON.parse(response.data)
return data;
}
)
);
}
public connect(url: string): AnonymousSubject<MessageEvent> {
if (!this.subject) {
this.subject = this.create(url);
console.log("Successfully connected: " + url);
}
return this.subject;
}
private create(url: string): AnonymousSubject<MessageEvent> {
let ws = new WebSocket(url);
let observable = new Observable((obs: 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 = {
error: null,
complete: null,
next: (data: Object) => {
console.log('Message sent to websocket: ', data);
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify(data));
}
}
};
return new AnonymousSubject<MessageEvent>(observer, observable);
}
}
错误:
获取此行的错误:
return new AnonymousSubject<MessageEvent>(observer, observable);
1条答案
按热度按时间63lcw9qa1#
可以按如下方式更改观察点