Intereting Posts
Как указать несколько исходных папок в build.properties при использовании ant для сборки проектов Android? Android и SQLite: когда использовать точки с запятой для завершения операторов? YouTubePlayerFragment не работает (Воспроизведение) в CollapsingToolbarLayout Сообщение для андроид моно Не удается сохранить файлы на внешнем хранилище, даже с разрешениями пользователя Robolectric – однопанельный (/ один-фрагмент) -тест Как показать веб-представление как OverviewMode (полностью уменьшенное) в android? как? Прокрутка галереи позволяет нажатию и удаляет прослушиватель кликов из подпунктов Как очистить динамически созданный вид из памяти? Подробное объяснение профиля из «adb shell dumpsys meminfo my-app-name»? Что касается правильной прокрутки в режиме горизонтального просмотра ресайклеров Как запустить мероприятие со специальной вкладкой? Безусловная компоновка, инфляция из адаптера просмотра: следует использовать шаблон View Holder Нужно ли устанавливать прослушиватели интерфейса фрагмента на нуль при отсоединении? Плохая производительность Android Canvas.drawBitmap – переход на OpenGL?

Обмен сообщениями для мобильных потребителей

У меня в моей системе тысячи мобильных устройств. Они подключены к моему центральному серверу. Мне нужно иметь механизм для их обновления на основе какого-либо события, которое отслеживает определенные устройства (уведомлять по теме). Предположим, у меня есть чаты на сервере, и мобильный пользователь может следить за любым чатом и хочет эффективно получать уведомления о новых сообщениях в чате. Первичная мобильная платформа – Android.

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

    Честно говоря, моя рекомендация в том, что вы не пытаетесь построить это самостоятельно. Есть тонна подводных камней, с которыми вы столкнетесь – намного больше, прежде чем вы даже нажмете масштаб. Вам нужно беспокоиться о таких вещах, как обработка сетевых подключений, синхронизация, загрузка данных, обработка сообщений с большим количеством сообщений – список продолжается. Кстати, моя предыдущая компания, которая строила приложение и имела более 500 инженеров, тоже пыталась его построить – и потерпела неудачу.

    Я знаю, потому что мы его построили – это называется «Магнитное сообщение». Посмотрите, что у нас есть на http://developer.magnet.com . Мы создали концепцию каналов именно для того, о чем вы говорите, и способов надежно доставлять эти сообщения.

    Дайте мне знать, как это происходит для вас.

    Kafka и RabbitMQ – совсем другие подходы. Kafka – это система хранения журналов (то есть упорядоченная последовательность сообщений), а RabbitMQ – просто очередность и маршрутизация.

    Я разрабатываю систему поиска событий. Я использую:

    1. Кафка в бэкэнд
    2. RabbitMQ (или другие платформы, такие как XMPP) для подключения клиентов

    RabbitMQ хорошо масштабируется на тысячах очередей и позволяет клиенту определять частные очереди (неназванные, временные, отдельные потребители, исключить), которые необходимы для RPC и простой безопасности. Клиенты обычно должны выполнять определенные функции в кластере или только читать отфильтрованный набор событий (не все события) из-за их ограничения в пропускной способности. Теоретически, kafka можно было использовать, но сейчас есть несколько проблем (например, ограничения по темам, эксклюзивные очереди, автоустановка и т. Д.).

    Kafka (+ samza) – очень хороший инструмент для поиска событий (например, для навигации по истории сообщений) и обработки потока в реальном времени (автоматическое воспроизведение, перезапуск процессов и т. Д.). Масштабирование не является необходимостью, так как это интеграция, высокая степень совместимости и восстановление.

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

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