уведомления в реальном времени занимают очень много времени для определенных учетных записей - PullRequest
1 голос
/ 01 апреля 2019

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

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

video of getstream realtime notification working as expected

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

screenshot of getstream realtime notification taking more than 16mins before the notification is received

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

Вот пример кода 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

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

screenshot with app located in singapore

screenshot of old slow app and new fast app side by side

...