Как регулировать события на сервере? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть угловое 6 приложение, которое общается через сервер через веб-сокет, точнее sockjs. Я запускаю задачу с сервера, вызываю REST и получаю очень большое количество сообщений в веб-сокете. Мой код работает ужасно. По сути, он блокирует экран до тех пор, пока поступают сообщения от веб-сокета.

Мой текущий код является компонентом

this.scenarioRunnerService.liveUpdate$
.subscribe(response => {
    this.processLiveUpdates(response.payload);
})

сервисный код

StompClientKeeper.getInstance().get()
.subscribe('/topic/abcd',
    (response: Response) => broadcast the new message);

Как я могу изменить это, чтобы не заморозить клиента?

1 Ответ

0 голосов
/ 27 июня 2018

Если вы хотите просто игнорировать некоторые сообщения, когда они приходят слишком быстро, скорее всего, вы ищете оператор auditTime:

import { auditTime } from "rxjs/operators";

this.scenarioRunnerService.liveUpdate$.pipe(
  auditTime(400)
).subscribe(response => {
  this.processLiveUpdates(response.payload);
});

Если в течение указанного времени получено несколько сообщений, оператор auditTime игнорирует все сообщения, кроме последнего полученного сообщения.

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

И оператор sampleTime - еще одна возможность. Снова все по-другому, так как он будет проверять полученные сообщения в указанный период.

Какой оператор вы выберете, зависит от желаемого поведения.

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