Я создаю приложение чата для iOS, используя Swift, node.js, socket.io и MongoDB. До сих пор все работает отлично. Я пытаюсь ввести статусы, такие как «Отправлено», «Доставлено» и «Чтение» для каждого сообщения.
- Отправлено: сообщение было успешно получено на сервере и вставлено в базу данных MongoDB.
- Доставлено: сообщение было успешно получено получателем (получателями), что означает, что он получил уведомление в приложении или pu sh уведомление о iOS сообщения.
- Чтение: получатель (и) прочитал / прочитал сообщение в соответствующем контроллере представления чата.
Обратите внимание, что в одном разговоре могут участвовать до 25 человек. Теперь мне просто интересно, как мне следить за статусами. У меня есть две идеи, которые приходят мне на ум, но я открыт для любых предложений, советов или мнений о том, как правильно это реализовать.
- Я отслеживаю статусы на сообщение в MongoDB, используя массив людей, которым доставили или прочитали сообщение. Это означало бы, что мне придется обновлять много сообщений, когда кто-то включает их iPhone или когда кто-то читает беседу, в которой было отправлено много сообщений с момента последней проверки этого человека. Поэтому я думаю, что это означало бы много транзакций для чего-то довольно простого.
- Моя вторая идея, которая, на мой взгляд, является лучшей, но я хотел бы знать, если кто-то думает о каких-либо проблемах, заключается в следующем : на уровне разговора я отслеживаю метку времени «lastDelivered» и метку времени «lastRead» для каждого члена группы. Затем я могу рассчитать, основываясь только на этих двух временных метках, какие сообщения были отправлены, доставлены и прочитаны. Просто проверьте, находится ли рассматриваемое сообщение до или после сохраненной отметки времени. Это значительно упростит (я думаю) обновление и приведет к значительному улучшению базы данных MongoDB.
Есть идеи? Мнения? Другие предложения, может быть?