Я использую 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. В настоящее время я использую длинный опрос, я также могу использовать веб-сокет.