Отложить signalR длинный запрос на опрос - PullRequest
1 голос
/ 18 июня 2020

Я использую Angular и библиотеку signalR для потоковой передачи данных из основного бэкэнда. NET.

Есть несколько типов потоковой передачи, и я попробовал 2 из них: 1005 * веб-сокет

длинный опрос

Потоковая передача работает отлично, а серверная часть отправляет мне много данных, которые я помещаю в очередь и обрабатываю на стороне внешнего интерфейса. Проблема в том, что через некоторое время очередь заполняется, и мне нужно убрать (выбросить) данные, которые бэкэнд отправляет мне. В этот момент я хочу сообщить бэкенду, что я занят, и он может немного отдохнуть (я не хочу, чтобы бэкэнд тратил ресурсы на отправку мне данных, которые я не могу обработать). Если я избавлюсь от потоковой передачи и начну снова, она будет слишком медленной, поэтому мне нужно что-то намного быстрее. не знаю, как сказать, что фронтенд занят и отложить запрос.

Это мой хаб-соединение и метод потоковой передачи на стороне внешнего интерфейса:

 this.hubConnection = new HubConnectionBuilder()
      .withUrl(this.href + '/api/hub/stremingMethod', HttpTransportType.LongPolling)
      .withAutomaticReconnect()
      .build();

private startStreaming(streamingId: number): signalR.ISubscription<DataModel> {
    return this.hubConnection.stream<DataModel>('StremingMethod', streamingId).subscribe({
      next: streamingData=> {
        this.addToQueue(streamingData);
      },
      complete: () => {
        console.log('complete');
      },
      error: error => {
        console.log('complete');

      }
    });
  }

Мой вопрос в том, как я могу отложить внешний интерфейс для отправки запроса на сервер, когда я этого хочу? Могу ли я иметь такой контроль в signalR. В настоящее время я использую длинный опрос, я также могу использовать веб-сокет.

...