Angular 7 — лучший способ получать обновления с сервера в приложение

#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. Спасибо, я проверю этот подход.