уведомления в реальном времени занимают очень много времени для определенных учетных записей

#javascript #getstream-io

#javascript #getstream-io

Вопрос:

Я пытаюсь отладить, почему уведомления в реальном времени приходят очень долго, используя realtime api. Извлечение данных вручную работает так, как ожидалось.

Я зарегистрировался в личной учетной записи getstream и использовал эти ключи, и задержка уведомления соответствует ожиданиям.

видео с уведомлением getstream в реальном времени, работающим как ожидалось

Однако при использовании точно такого же кода и простом переключении клавиш в существующем приложении, которое у нас есть, для получения требуется более 16 минут (!!!) (я не прикрепляю здесь видео, поскольку оно огромное, а просто скриншот времени получения уведомления).

скриншот уведомления getstream в реальном времени, которое занимает более 16 минут до получения уведомления

Я могу подтвердить, что данные отправляются в getstream, просмотрев вкладку stream Explorer на веб-сайте и включив автоматическое обновление.

Вот пример poc-кода, который я написал, чтобы проиллюстрировать проблему https://github.com/parasquid/getstream_poc/blob/master/views/index.html.erb

 <script src="https://cdn.jsdelivr.net/npm/getstream/dist/js_min/getstream.js"></script>
hello!

<div id="timer"></div>
<p><button id="add-activity">Add activity</button>

<script>
  var interval
  var client = stream.connect('<%= @apikey %>', null,  '<%= @appid %>');

  var userFeed = client.feed('user', '<%= @user_id %>', '<%= @user_token %>')
  var userSubscription = userFeed.subscribe(
    () => userFeed.get()
      .then(streamData => console.log(streamData))
      .then(() => clearInterval(interval)),
    (errors) => console.error({errors})
  );

  var notificationFeed = client.feed('notification', '<%= @user_id %>', '<%= @notification_token %>')
  var notificationSubscription = notificationFeed.subscribe(
    () => notificationFeed.get().then(streamData => console.log(streamData)),
    (errors) => console.error({errors})
  );

  button = document.querySelector("button#add-activity")
  button.onclick = (e) => {
    timer = document.querySelector("div#timer");
    var seconds = 0
    interval = setInterval(() => {
      seconds  ;
      timer.innerHTML = seconds;
    }, 1000);

    fetch("/add_activity")
      .then(r => r.json())
      .then(json => console.log(json));
  }

</script>
  

Из того, что я могу собрать, это, похоже, относится к учетной записи, а не к реализации; или, может быть, я просто делаю что-то странное. Был бы признателен за подсказки!


Обновление 2019-04-02

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

скриншот с приложением, расположенным в Сингапуре

скриншот старого медленного приложения и нового быстрого приложения рядом

Комментарии:

1. есть ли какая-либо разница в двух тестируемых вами приложениях? например. используются группы каналов / регион…

2. единственная разница, я думаю, будет в местоположении? Приложение для медленной учетной записи находится в Сингапуре, а приложение для недавно созданной учетной записи — на востоке США. Мой локальный компьютер в настоящее время находится в Малайзии, поэтому я думал, что задержки будут быстрее. Хорошая идея, позвольте мне посмотреть, изменит ли изменение местоположения ситуацию.

3. @TommasoBarbugli Я добавил больше информации выше. Я попробовал ваше предложение (зеркально отображать группы каналов и местоположение), и хотя задержка больше (11 секунд вместо 1), это все еще не так плохо, как исходное приложение, которое мы используем.