Нам необходимо использовать общую структуру данных для внутреннего сервера, веб-клиентов, собственных приложений iOS и собственных приложений Android. Внутренний сервер написан на NodeJS и использует базу данных Postgres внизу.
Я рассмотрел базу данных Firebase в реальном времени, поскольку она решит все требования в том смысле, что серверная часть может писать в базу данных Firebase, а все клиенты могут использовать базу данных.
Мой вопрос в том, есть ли альтернатива с открытым исходным кодом, которая будет работать из коробки и будет больше соответствовать нашим требованиям, чем полноценная база данных Firebase в реальном времени, которая будет предлагать многие функции, которые нам не нужны или не нужны.
--- Вот предположения и требования ----
Бэкэнд служит мастером, поэтому изменения в структуре данных могут быть выполнены только сервером.
Можно предположить, что структура данных представляет собой простой список пар ключ-значение, простой массив объектов или полноценную древовидную структуру, такую как объект json. Мы умеем работать со всеми решениями.
Структура данных будет очень ограниченной по размеру, скажем, менее 100 КБ.
Любое обновление структуры данных на сервере должно распространяться на всех клиентов, которые подписались на структуру данных, почти в реальном времени.
Если клиент отключен в течение определенного периода времени, он должен обновиться, как только он подключится.
У каждого типа клиента должен быть надежный способ подписки на изменения в структуре данных. Следовательно, как только локальная версия структуры данных обновляется, в то же время следует уведомлять о том, что изменилось.
Если возможно, клиенты при уведомлении об обновлении структуры данных должны знать, какая «часть структуры данных» была обновлена.
Мы хотим писать как можно меньше кода и предпочитаем решение, в котором есть серверная библиотека для NodeJS и клиентские библиотеки для Интернета, встроенной iOS и встроенной Android.
Собственные приложения не могут запрашивать разрешение на push-уведомления.
Он должен работать в любом современном браузере, поддерживающем веб-сокеты или аналогичные.