#angular #api #server #updates
#angular #API #сервер #Обновления
Вопрос:
Я разрабатываю службу сообщений angular7 (от пользователя к пользователю) для своего сайта. На данный момент я получаю обновления с сервера (Yii2 REST API) каждые 3 минуты с интервалом. (код приведен ниже)
Является ли это подходящей практикой? Какой самый удобный способ получать обновления с сервера?
export class NotificationDropdownComponent implements OnInit {
public notifications;
constructor(
private notificationService: NotificationService,
) { }
ngOnInit() {
this.getNotSeen();
}
getNotSeen():void {
this.notificationService.getUpdates()
.subscribe( response => {
if (!response.error) {
if (response.notifications) {
this.notifications = response.notifications;
}
this.toBeUpdated();
}
});
}
toBeUpdated(){
interval(3*60*1000)
.pipe(flatMap(()=> this.notificationService.getUpdates()))
.subscribe( response => {
if (!response.error) {
if (response.notifications) {
this.notifications = response.notifications;
}
}
});
}
}
Ответ №1:
Лучший способ — использовать SSE https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events если ваш ответ API с заголовком типа:
header('Cache-Control: no-cache');
header("Content-Type: text/event-streamnn");
вы можете выполнить получение обновлений в NotificationService :
getUpdates(){
let source = new EventSource('http://serverip:port/get_mydata');
source.addEventListener('message', response => {
const response = JSON.parse(response);
return reponse;
});
}
И обновлять в вашем NotificationDropdownComponent
toBeUpdated(){
this.notificationService.getUpdates().subscribe( response => {
if (!response.error) {
if (response.notifications) {
this.notifications = response.notifications;
}
}
});
}
Комментарии:
1. Спасибо, я проверю этот подход.