import {Injectable} from '@angular/core';
import {Observable} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SseService {
private eventSource!: EventSource;
constructor() {}
connect(): Observable<MessageEvent> {
this.eventSource = new EventSource('http://localhost:5000/send');
return new Observable((observer) => {
this.eventSource.onmessage = (event: MessageEvent) => {
observer.next(event);
};
this.eventSource.onerror = (error: Event) => {
observer.error(error);
};
});
}
disconnect(): void {
this.eventSource.close();
}
}
组件中使用
import {Component, OnInit} from '@angular/core';
import {SseService} from 'src/app/services/sse.service';
import {Subscription} from 'rxjs';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit {
content = 'home';
subscription!: Subscription;
constructor(private sseService: SseService) {}
ngOnInit(): void {
this.subscription = this.sseService.connect().subscribe(
(event) => {
console.log('data', event.data);
},
(error) => {
console.log('error', error);
}
);
}
ngOnDestroy(): void {
this.sseService.disconnect();
this.subscription.unsubscribe();
}
}