Я делаю приложение для чата с использованием firebase, и у меня может быть два «ListenerRegistration».Тот, который слушает
/chats/{userid}/allChatroomsLastMessages
, и тот, кто слушает текущую комнату чата, в которой я нахожусь.
/chats/{chatroomId}/messages
и записываю те же данные «последнего сообщения» избыточно для каждого пользователя
/chats/{userid}/allChatroomsLastMessages
или, в качестве альтернативы, я могу иметь только одну чат-комнату и хранить все свои данные один раз в
/chats/{chatroomId}/messages/
, но тогда последствием будет то, что для каждой «комнаты чата» в пользовательском интерфейсе,Мне нужно было бы на клиенте установить ListenerRegistration для каждой комнаты (даже если я не в комнате, чтобы обновить то, что было последним сообщением, отправленным в чат)
Один метод выигрывает из-за простотыне более двух прослушивателей, но не удается, потому что для каждого пользователя в комнате чата потребуется избыточное хранение «последнего сообщения».
Другой метод выигрывает, потому что он сохраняет данные один раз для всех пользователей в чате.Тем не менее, я обеспокоен тем, что если для пользователя имеется 50 комнат чата, то количество экземпляров ListenerRegistration снизит производительность из-за опроса сокетов или любого другогоИспользуется (я никогда не использовал ListenerRegistration, и я не знаю, как лучше было бы их принимать)
Технически количество экземпляров ListenerRegistration может быть неограниченным (вы всегда можете открыть новую комнату чата).Однако я ожидаю, что в 65 комнатах чата.
Я еще ничего не реализовал, но вижу ожидаемую проблему масштабируемости
messageListener = reference?.addSnapshotListener
{ querySnapshot, error in
guard let snapshot = querySnapshot
else
{
Ожидаемый результат - минимизация хранения данных и поддержание производительности приложения.