Webflux / Angular медленно серверные события против http-клиента - PullRequest
0 голосов
/ 14 ноября 2018

Я запускаю демонстрацию локально с angular и webflux, поражающим конечную точку webflux, которая возвращает 3 фотографии размером ~ (20 МБ, 1 КБ, 20 МБ) из db

Разница во времени при использовании http-клиента и SSE наугловой сервис огромен, я что-то здесь упускаю?

enter image description here

пружинный контроллер

@RestController
public class PhotoController {

    @GetMapping(value = "/photos")
    public Flux<Photo> getAllPhoto() {
        return photoService.findAll();
    }
}

угловой сервис

     getWithGET(): Observable<any> {
         return this.http.get(this.URL);
     }

    getWithSSE(): Observable<any> {
        return Observable.create(obs => {
            const es = new EventSource(this.URL);
            es.addEventListener('message', (evt) => {
                obs.next(evt);
            });
            return () => es.close()
        });
    }

угловой компонент

clickGET() {
  this.requestsService.getWithGET()
  .subscribe(
    data => console.log(data);

}
clickSSE() {
  this.requestsService.getWithSSE()
  .pipe(take(3))
  .subscribe(
    message  => console.log(message );
  }

1 Ответ

0 голосов
/ 18 апреля 2019

Вы не возвращаете поток фотографий, как вы думаете.Вы должны указать свой метод, чтобы использовать правильный тип ответа.

@GetMapping(value = "/photos", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Photo> getAllPhoto() {
    return photoService.findAll();
}

Это позволит вашему Angular приложению обрабатывать события правильно и намного быстрее.

...