Потоковая передача Firebase REST для нескольких пользователей

У меня есть сервер, который должен получать обновления в реальном времени от Firebase для нескольких пользователей, где каждый пользователь предоставляет доступ Oauth к своим данным Firebase моему приложению.

Мой сервер реализован с использованием Firebase REST Streaming на основе событий, отправленных сервером.

Мне нужно знать, есть ли способ мультиплексировать данные Firebase, относящиеся к нескольким пользователям, в одном потоке.

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

В противном случае кажется, что мне нужно поддерживать отдельный поток для каждого токена Oauth, который кажется не масштабируемым.

Я думаю, что в Твиттере есть функция Site Streams, подобная той, которую я ищу в их API, реализованной через конверт, указывающий пользователя, которому предназначено сообщение.

Поддерживает ли Firebase что-то подобное?


person Yoni Rabinovitch    schedule 26.05.2015    source источник


Ответы (1)


Один вызов Firebase REST будет отслеживать только один узел. Например.

curl 'https://samplechat.firebaseio-demo.com/users/jack/name.json'

Вы можете управлять тем, какие данные возвращаются из этого узла с помощью параметров orderBy, startAt,endAtandlimitTo...`. Например.

curl 'https://samplechat.firebaseio-demo.com/users/.json?orderBy="name"&startAt="Jack"'

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

Обратите внимание, что SDK, предоставляемые Firebase для внутреннего использования, используют протокол веб-сокетов, поэтому это ограничение не распространяется на них. Если для вашего серверного языка доступен SDK (например, node.js, Java), вы можете решить эту проблему, используя его.

person Frank van Puffelen    schedule 26.05.2015
comment
Спасибо. Я начал с использования SDK node.js на своем сервере. Однако там я столкнулся с ограничением, описанным в link. Описанное там решение (использование недокументированного второго параметра в конструкторе Firebase, который указывает экземпляру установить и поддерживать новое TCP-соединение, а не совместно использовать общее) работает , ОДНАКО то, что я ищу, - это совместное использование TCP-соединения, а не создание нового для каждого пользователя. Это можно сделать? - person Yoni Rabinovitch; 27.05.2015
comment
[Отказ от ответственности: я работаю в Firebase] В настоящее время сервер Firebase требует отдельного подключения для каждого контекста/токена. Вы ничего не можете сделать на стороне клиента, чтобы изменить это. Может быть библиотека для мультиплексных соединений, но что-то в конце концов должно держать сокет открытым для каждого контекста. Если он недостаточно хорошо масштабируется для ваших потребностей на стороне клиента, вам придется рассмотреть другой подход. - person Frank van Puffelen; 27.05.2015
comment
Таким образом, кажется, что, например, Works With Nest API, основанный на Firebase, по своей сути не масштабируется. Я имею в виду, что если мое приложение обслуживает 1 миллион подписчиков Oauth'd Nest, то мой сервер должен поддерживать 1 миллион открытых соединений с Firebase. Я что-то упускаю? Если это так, то я не понимаю, почему Nest основывает свой API на Firebase. Есть ли у Firebase какие-либо планы по решению этой проблемы и обеспечению мультиплексных соединений? Я бы предположил, что любое серверное приложение, интегрирующееся с Firebase, сталкивается с этим ограничением. - person Yoni Rabinovitch; 27.05.2015