Использует ли WhatsApp MQTT
За кулисами приложений чата
Используется много приложений в чате, но лишь некоторые из них выделяются из -за качеств, которые они несут, которые привлекают пользователей. Два из лучших приложений для чата считаются Facebook Messenger и WhatsApp. Хотя эти компании осторожны с архитектурой своих приложений, мне удалось найти кусочки информации из статей и форумов в блоге. Это их композиция, и эти факты могут быть устарели, поскольку все эти приложения, как правило, часто обновляются.
1. Facebook Messenger
Messenger’s Facebook – одно из самых популярных приложений в чате. Несколько лет назад Messenger не был в своей лучшей форме. Его производительность и использование пространства начали отставать от. Messenger использовал модель на основе тяги. Каждый раз, когда приложение было признано легким уведомлением о наличии новых сообщений, а затем приложение будет привлекать и получать тяжелый ответ JSON, содержащий представление о разговоре. Но позже Messenger был обновлен, чтобы использовать модель Snapshot + Delta на основе PUSHT.
Ключевые моменты:
- У Messenger были проблемы с производительностью и использованием пространства.
- Первоначально он использовал модель на основе тяги для поиска сообщений.
- Позже он переключился на модель Snapshot + Delta на основе PUSHT.
Вопросы:
- Каковы были проблемы с мессенджером изначально?
- На какую модель Messenger переключилась на поиск сообщений?
Ответы:
- У Messenger были проблемы с использованием производительности и пространства.
- Messenger переключился с модели на основе тяги на модель Snapshot + Delta на основе pusht +.
2. WhatsApp
WhatsApp основан на стеке Lyme/Lyce.
Внутри закулисных WhatsApp одна из самых увлекательных и важных вещей-это бэкэнд, написанный в Erlang. Erlang имеет огромный вклад в создание WhatsApp одним из лучших приложений для чата в мире.
“Почему Эрланг?”
Erlang-это язык общего назначения, одновременный, функциональный язык программирования. Области, в которых, как известно, полезны Erlang, обрабатывают множество соединений и маршрутизации сообщений, учитывая некоторые аспекты сообщения. Поскольку Erlang демонстрирует отличную производительность в этих сценариях, большинство приложений, связанных с телекоммуникацией, используют Erlang в своих реализациях.
Первоначальная реализация сервера WhatsApp была выполнена с использованием Ejabberd, который представляет собой сервер обмена сообщениями с открытым исходным кодом Jabber/XMPP, записанный в Erlang. Протокол обмена сообщениями, используемый для реализации, – XMPP (расширяемый протокол обмена сообщениями и присутствия).
Другим важным аспектом приложения чата является база данных. Большую часть времени база данных может стать узким местом производительности в приложениях обмена сообщениями в реальном времени. WhatsApp использует Mnesia, которая, как известно, является DBMS в реальном времени в режиме реального времени. Одним из важных аспектов Мнезии является то, что его можно перенастроить во время выполнения.
Хотя WhatsApp считается довольно простым по сравнению с услугами Messenger, такими как Facebook Messenger, его дизайн не прост. На следующей диаграмме показан очень абстрактный взгляд на архитектуру WhatsApp.
Home Automation на основе WhatsApp: протокол мостика с MQTT
В этой статье мы будем контролировать устройства, которые не поддерживают WhatsApp, но поддержим другие протоколы связи, такие как MQTT, TCP, IMAP и т. Д. Если дом установлен с устройствами домашней автоматизации, которые не поддерживают WhatsApp, мы будем общаться с этими устройствами (контроллерами), используя протоколы, поддерживаемые этими устройствами. Таким образом, мы сможем контролировать домашние приборы, подключенные к этим устройствам.
Требуются компоненты:
- На основе Python WhatsApp API – YOWSUP
- Библиотека MQTT – Пахо
- Python Id
- Arduino Ide
Технические идеи:
Протокол Bridging также может управлять устройствами, которые не поддерживают API WhatsApp. Это означает, что мы просто отправим данные из одного протокола в другой. Эта статья продемонстрирует MQTT и WhatsApp Bridge для управления устройствами.
Блок-схема:
Вся связь будет проходить через сценарий Python, который установлен на системе на основе Linux. Сценарий Python будет иметь библиотеку API WhatsApp и MQTT для общения с обоими протоколами. Сценарий может отправлять и получать сообщения на WhatsApp и MQTT.
Вопросы:
- Каковы необходимые компоненты для домашней автоматизации на основе WhatsApp с MQTT?
- Какова цель протокола мостики в домашней автоматизации?
Ответы:
- Требуемые компоненты для домашней автоматизации на основе WhatsApp с MQTT-это API на основе Python (YOWSUP), библиотека MQTT (PAHO), Python ID и Arduino IDE.
- Протокол мостики позволяет общаться и управлять устройствами, которые не поддерживают API WhatsApp, отправляя данные из одного протокола (E.г., MQTT) к другому.
Использует ли WhatsApp MQTT
После успеха соединения мы можем отправлять сообщения, используя это
публиковать.сингл (тема, Message_Data, HostName =”маклер.HIVEMQ.компонент”)
За кулисами приложений чата
Есть много приложений чата используется. Но лишь немногие из них выдаются из -за качеств, которые они несут, что привлекает пользователей. Два из этих лучших приложений для чата считаются Facebook Messenger и WhatsApp. Хотя эти компании дискретны в отношении архитектуры своих приложений, мне удалось найти кусочки информации из статей и форумов в блоге. Это их композиция, и эти факты могут быть устаревшими, поскольку все эти приложения имеют тенденцию обновляться часто.
1. Facebook Messenger
Facebook’S Messenger – одно из самых популярных приложений в чате. Несколько лет назад Мессенджер не был’T на нем’S лучшая форма. Это’S Производительность и использование пространства начали отставать от. Messenger использовал модель на основе тяги. Каждый раз, приложение было признано легким уведомлением о наличии новых сообщений, а затем приложение будет привлекать и получать тяжелый ответ JSON, содержащий представление о разговоре. Но позже Messenger был обновлен, чтобы использовать модель Snapshot + Delta на основе PUSHT.
MQTT-это протокол подключения к машине (M2M). Он был разработан как чрезвычайно легкий транспорт публикации/подписки на обмен сообщениями – MQTT.орг
Еще одно интересное изменение, которое было сделано в инфраструктуре Messenger, – это переход с JSON на Благотворительный. Это значительное изменение привело к сокращению размера полезной нагрузки на 50%.
Были значительные улучшения и в северной стороне. Ранее каждое сообщение было записано на традиционный уровень хранения перед отправкой Messenger триггер для прочтения сообщения с уровня хранения, который сделал проблематичным масштабированием. Но процесс был полностью заменен с использованием упорядоченной реализации очереди, созданной самим Facebook, называемой под названием “Ирис”. Одной из интересных особенностей Iris является использование указателей, которые облегчает синхронизацию сообщений между мессенджером и уровнем хранения. Следующее изображение четко показывает, как синхронизирование сообщения происходит в мессенджере
Приведенная выше описанная процедура смогла удалить зависимость доставки сообщений от доступности и скорости написания уровня хранения в использовании. Iris хранит в нем сообщения временно’S -поддержка, пока все сообщения не синхронизируются.
Еще один интересный факт заключается в том, что хранилище радужной оболочки было построено с использованием MySQL и Flash.
2. WhatsApp
WhatsApp основан на стеке Lyme/Lyce.
Внутри кулисов WhatsApp, одной из самых захватывающих и важных вещей является бэкэнд, написанный в Erlang. Erlang имеет огромный вклад в создание WhatsApp одним из лучших приложений для чата в мире.
Почему Эрланг ?
Erlang-это язык общего назначения, одновременный, функциональный язык программирования. Области, где, как известно, полезны Эрланг
> Обработка многих соединений
> Маршрутизация сообщений с учетом некоторых аспектов сообщения
Поскольку Erlang показывает отличную производительность в данных сценариях, большинство приложений, связанных с телекоммуникациями, используют Erlang в своих реализациях.
Первоначальная реализация сервера WhatsApp была сделана с использованием Ejabberd. Который представляет собой сервер обмена мгновенными сообщениями Jabber/XMPP/XMPP, записанный в Erlang. Протокол обмена сообщениями, который используется для реализации, – это XMPP (расширяемый протокол обмена сообщениями и присутствия).
Другим важным аспектом приложения чата является база данных. В большинстве случаев база данных может стать узким местом производительности в приложениях обмена сообщениями в реальном времени. WhatsApp использует Mnesia, которая, как известно, является DBMS в реальном времени. Одним из важных аспектов Мнезии является то, что его можно перенастроить во время выполнения.
Хотя WhatsApp считается довольно простым по сравнению с сервисами Messenger, такими как Facebook Messenger, он’S Design IS’t простой. На следующей диаграмме показан очень абстрактный взгляд на архитектуру WhatsApp,
Home Automation на основе WhatsApp: протокол мостика с MQTT
В этой статье мы будем контролировать устройства, которые не поддерживают WhatsApp, но поддержим другие протоколы связи, такие как MQTT, TCP, IMAP и т. Д. Если дом установлен с устройствами домашней автоматизации, которые не поддерживают WhatsApp, мы будем общаться с этими устройствами (контроллерами), используя протоколы, поддерживаемые этими устройствами.
Таким образом, мы сможем контролировать домашние приборы, подключенные к этим устройствам.
Требуются компоненты
Требуемые инструменты/ требуются библиотеки
На основе Python WhatsApp API-YOWSUP
Библиотека MQTT – Пахо
Python Id
Arduino Ide
Технические идеи
Протокол Bridging также может управлять устройствами, которые не поддерживают API WhatsApp. Это означает, что мы просто отправим данные из одного протокола в другой. Эта статья продемонстрирует MQTT и WhatsApp Bridge для управления устройствами.
Блок-схема
Рисунок 1 WhatsApp и протокол MQTT Bridging
Вся связь будет через сценарий Python, который установлен в системе на основе Linux. Сценарий Python будет иметь WhatsApp API и библиотеку MQTT для общения с обоими протоколами.
Сценарий может отправлять и получать сообщения на WhatsApp и MQTT.
Микроконтроллер (Atmega 328p) подключен к домашним приборам через реле. Для целей связи ESP подключен к микроконтроллеру.
ESP установлен с кодом, который получает сообщения по определенной теме и отправляет команды в микроконтроллер через серийный UART.
Итак, теперь, когда какой -либо пользователь отправляет сообщения на WhatsApp, он переходит к микроконтроллеру через наш сценарий Python.
Принципиальная электрическая схема
Эта плата подключена к выключателю света с цепью реле. Мы также можем взять доску UNO Arduino, а не наша совета директоров 328.
Как работает система
Когда пользователь отправляет сообщение в нашу систему Linux в WhatsApp, сценарий считывает сообщение. Устройство IoT, которое поддерживает протокол MQTT, слушает сообщения по определенной теме. Эти сообщения приказывают устройству для включения и выключения устройства.
Итак, теперь сообщения, прочитанные сценарием Python, отсканируются на предмет команд, если найдено. Конкретные команды отправляются на устройство по протоколу MQTT. Когда устройство считывает эти команды, оно действует на них, ставя высокие штифты (включено), низкий (выключен)
Понимание исходного кода
У нас есть два типа исходного кода, один для Arduino + ESP, а другой для скрипта Python, установленного в Linux.
Код для Arduino
Arduino установлен с кодом, который получает данные о последовательных. Когда конкретная Strrring получена как “НА” он включит релевой штифт (высокий) и при получении “ВЫКЛЮЧЕННЫЙ” это выключает эстафету.
if (rec == “НА”)
DigitalWrite (Relay, High);
Сериал.Распечатать(“Реле включается”);
rec = “”;
>
if (rec == “ВЫКЛЮЧЕННЫЙ”)
DigitalWrite (Relay, Low);
Сериал.Распечатать(“Реле выключено”);
rec = “”;
>
Код для ESP
ESP связан с Arduino на последовательном порту, а также подписан на тему MQTT, чтобы получить данные от него. По сути, он отправляет данные, полученные по теме MQTT в последовательный порт и данные от сериала в тему MQTT.
Чтобы узнать больше о ESP и MQTT, обратитесь к нашим предыдущим статьям.
Код для сценария Python
Сценарий Python установлен с “YOWSUP” WhatsApp API для чтения и отправки сообщений из WhatsApp. В этом скрипте есть два файла бегать.пирог и слой.пирог.
Понимание запуска файла.пирог
Мы позвоним в наши библиотеки в верхней части файла
от YOWSUP.Стеки импортируют yowstackbuilder
от YOWSUP.слои.Автором импорта Auth
от YOWSUP.Слои импортируют yowlayerevent
от YOWSUP.слои.Импорт сети yownetworklayer
от YOWSUP.Env Import Yowsupenv
Мы также прикрепим файл слоя сверху, потому что основной класс “Эхолайер” существует внутри этого файла.
от импорта слоя Echolayer
Мы можем назвать файл слоя, но мы должны указать здесь одно и то же имя.
Внутри пирог, Мы объявим о нашей основной переменной для пароля и событий, которые хотим произойти.
учетные данные = (“91xxxxxxxxxx”, “Hkhwvw5/wnr493hxk8nkl/htpno =”)
Теперь мы передаем их на слой и строим стек. Кроме того, петля, которая будет поддерживать связь вживую, называется.
куча.setcredentials (учетные данные)
куча.FroadcastEvent (YOWLAYEREVEV (YOWNETWORKLYER.Event_state_connect)) #sending сигнал подключения
куча.loop () #это программа MainLoop
Понимание слоя файла.пирог
Этот файл содержит библиотеку протоколов для MQTT и способен получать сообщения от WhatsApp.
Занижение того, как сообщения получены от WhatsApp
Этот файл содержит класс, который будет получать любые сообщения, входящие в этот номер, и это будет объектом обратного вызова, чтобы любой другой цикл можно запустить внутри файла.
@ProtocolentityCallback (“сообщение”)
def onmessage (self, protocolentity):
если правда:
Данные сообщений и форму номера, из которой появилось сообщение, можно получить ниже.
incomming_message_data = messageprotocolentity.getbody ()
Это получит тело сообщения, которое является реальным сообщением. Он будет храниться в строковой переменной “incomming_message_data”
incomming_message_sender = messageprotocolentity.получить от()
В этой строке хранится контактный номер входящего сообщения в строковой переменной “incomming_message_sender”
Понимание слоев MQTT для отправки и получения
Прежде всего, мы будем импортировать библиотеки, необходимые для MQTT.
Импорт Пахо.MQTT.Клиент как MQTT
Импорт Пахо.MQTT.Публикуйте как публикация
Теперь мы объявим переменную с именем клиента с клиентом MQTT.
Клиент = MQTT.Client ()
Теперь мы сделаем два обратных вызова функции 1. Для получения сообщений 2. Делать что -то на связи успешно.
клиент.on_connect = on_connect
клиент.on_message = on_message
Наконец, мы подключимся к брокеру MQTT на порту и запустим клиент в неблокирующем цикле
клиент.соединять(“маклер.HIVEMQ.компонент”, 1883, 60)
клиент.loop_start ()
После успеха соединения мы можем отправлять сообщения, используя это
публиковать.сингл (тема, Message_Data, HostName =”маклер.HIVEMQ.компонент”)
Когда какое -либо сообщение получено на WhatsApp, оно хранится в строке, а затем эта строка сканируется на наличие ключевых слов, которые определяют это сообщение как команду, чтобы включить/выключить свет.
Элиф (“включенный свет” в incomming_msg): #do что -то на матче
Если условие сопоставлено, мы отправляем команду управления брокеру MQTT.
публиковать.одинокий(“TS/свет”, “НА”, HOSTNAME =”маклер.HIVEMQ.компонент”)
Когда было получено какое -либо непризнанное сообщение, сообщение на WhatsApp отвечает, что это недействительно.
И вот как мы можем использовать протокол мостики для управления устройствами с WhatsApp.
Xanecs/Axiom
Этот коммит не принадлежит ни к какой ветви в этом хранилище и может принадлежать вилке за пределами репозитория.
Переключение ветвей/тегов
Теги ветвей
Не мог загрузить ветви
Нечего показать
Не мог загрузить теги
Нечего показать
Имя уже используется
Тег уже существует с предоставленным названием филиала. Многие команды GIT принимают имена тегов, и ветви, поэтому создание этой ветви может вызвать неожиданное поведение. Вы уверены, что хотите создать эту ветку?
Отменить создание
- Местный
- Кодепсы
Https github cli
Используйте GIT или Checkout с SVN, используя веб -URL.
Работать быстро с нашим официальным CLI. Узнайте больше о CLI.
Войдите в обязатель
Пожалуйста, войдите в систему, чтобы использовать Codespaces.
Запуск настольного компьютера GitHub
Если ничего не произойдет, загрузите настольный компьютер GitHub и попробуйте еще раз.
Запуск настольного компьютера GitHub
Если ничего не произойдет, загрузите настольный компьютер GitHub и попробуйте еще раз.
Запуск Xcode
Если ничего не произойдет, загрузите Xcode и попробуйте еще раз.
Запуск кода Visual Studio
Ваше кодовое откроется, как только будет готово.
Была проблема с подготовкой вашего кода, попробуйте еще раз.
Последний коммит
GIT STATS
Файлы
Не удалось загрузить последнюю информацию о коммите.
Последнее сообщение о коммите
Совершить время
ПРОЧТИ МЕНЯ.доктор медицинских наук
Axiom – это программа Python, которая подключается к серверу MQTT и предоставляет интерфейс для службы обмена сообщениями WhatsApp.
- Клонировать это репо.
- Установить зависимости
PIP установить YOWSUP2 Paho-MQTT
- Редактировать Waserver/config.пирог . Учетные данные могут потребоваться от CLI YOWSUP2. Глянь сюда.
- Бегать
Python Waserver/Waserver.пирог
- Создать WaServer/config-prod.пирог
- Постройте изображение с предоставленным Dockerfile . Отдельные файлы конфигурации разрешают различные конфигурации разработки/производства.
Для получения сообщений подписаться на WhatsApp/вход . Сообщение будет выглядеть следующим образом:
< "телефон": "4915112345678", "сообщение": "Привет от человека!" >
Номер телефона в этом примере обычно будет писать +49 151 12345678 . Для групповых сообщений номер телефона находится в форме 4915112345678-1400000000 (номер телефона создателя группы и Unix TimeStamp of Creation).
Чтобы отправить сообщения, публикуйте в WhatsApp/Oping:
< "телефон": "4915112345678", "сообщение": "Привет от бота!" >
В настоящее время в реализации только команды
Чтобы получить информацию группы (члены, название), опубликовать в WhatsApp/Cmd
< "CMD": "Group_info", "телефон": "4915112345678-1400000000", "перезвонить": "any_string_here" >
Обратный вызов будет использоваться для определения ответа на эту команду. Желательно использовать UUID для этого. Ответ будет опубликован в тему WhatsApp/IQ:
< "CMD": "Group_info", "перезвонить": "any_string_here", "GroupId": "4915112345678-1400000000", "Участники": < "4915112345678": "администратор", "4915187654321": нулевой, >, "предмет": "Пример группы" >
О
MQTT-Interface для службы обмена сообщениями WhatsApp
Как WhatsApp очереди на ваши сообщения?
Эло там, приятель! Это’S будет почти два года пандемии через несколько месяцев, и то, как мы адаптировали наш образ жизни, о, мальчик! Мы все остались на связи и даже выполнили свою работу, используя различные платформы обмена сообщениями. Использование нескольких платформ, включая WhatsApp, Instagram и Facebook, значительно увеличилось. WhatsApp был тем с самым высоким использованием, а Индия – WhatsApp’Самый большой рынок в этом году! Но знаете ли вы, что WhatsApp использует одну из самых основных структур данных, очередь, которая используется этой платформой обмена сообщениями для успешного предоставления ваших сообщений?
Что такое очередь?
Очередь, как указывает название, точно так же, как в реальной жизни. Очередь имеет два конца, голова и хвост, а предметы добавляются только в хвостовом конце и удаляются с конца головы. Представьте себе группу людей, ожидающих в очереди, чтобы получить пиццу, и первого человека, который попал туда, я.эн., Первый в линии будет дана предпочтение и будет тем, кто получит пиццу или будет “выталкивается.” Эта концепция технически известна как FIFO или первая в первом.
Что такое очередь сообщения?
В качестве свидетельства о заголовке очередь сообщений – это очередь, полная сообщений. Эта асинхронная служба используется для передачи сообщений или данных между двумя людьми или группой людей. Человек, который отправляет сообщение в очередь, является продюсером, а тот, кто получает сообщение, – это потребитель. Из очереди’Точка зрения, сообщение – это всего лишь коллекция байтов и может быть чем угодно из обычного текстового сообщения или сообщения, содержащего клиента’S Идентификатор заказа или даже сообщение об ошибке.
- В системе очерков сообщений есть несколько серверов, известных как брокеры. Эти брокеры очень надежны и масштабируемы, и они образуют кластер. После того, как сообщение будет произведено или отправлено со стороны производителя, сообщение хранится в очереди сообщения, пока потребитель не будет доступен для принятия сообщений.
- Как только потребитель или получатель доступны для получения сообщения, очередь выдвигает сообщение потребителю и ждет, пока потребитель будет полностью обработать сообщение.
- После того, как потребитель обрабатывает сообщение, оно полностью удалено из очереди.
Решения в очереди сообщения
Существует несколько свободного программного обеспечения с открытым исходным кодом и свободного программного обеспечения, которое используется для очереди сообщений.
Кафка: Apache Kafka’Система обмена сообщениями-это хорошо продуманная система публикации подписки и система очередей, которая может обрабатывать очень высокие объемы данных. Кафка устойчив к ошибкам и постоянно контролирует узлы через различные услуги, что делает его эффективным для работы с.
Кролик mq: RabbitMQ является одной из наиболее используемых систем брокеров с открытым исходным кодом, которые первоначально реализовали расширенный протокол очереди сообщений (AMQP). Очереди – это единый поток в этой системе, и одна очередь может обрабатывать до 50 000 сообщений.
Amazon Sqs: Amazon Simple Queue Service – это распределенная система очередей, используемая для отделения различных микросервисов и приложений, не требуя от них поддержания своих очередей сообщений. Amazon SQS также предоставляет API веб -службы, к которому пользователи могут получить доступ к общим языкам программирования.
ActiveMQ: ActiveMq – это еще одна система сообщений, написанная на Java, и имеет полный клиент службы сообщений Java. Он имеет встроенную поддержку AJAX и REST и поддерживает различные протоколы, такие как AMQP, MQTT, Stomp и т. Д.
Как WhatsApp доставляет ваши сообщения?
Прежде чем мы пойдем в то, как сообщения будут в очереди в WhatsApp, пусть’S понимать само приложение. Кодированный с использованием языка программирования Erlang, WhatsApp наиболее используется с почти 2 миллиардами ежемесячных пользователей. WhatsApp использует протокол расширяемого обмена сообщениями и присутствия с открытым исходным кодом (XMPP) для облегчения мгновенных сообщений между двумя сторонами. Первоначально WhatsApp начал с использования сервера Ejabbered. При таком большом количестве пользователей в день крайне важно, чтобы серверы эффективно обрабатывали нагрузку, а система была надежной. В эти годы код был реструктурирован, переключившись с XMPP на внутренне разработанный протокол и изменяя некоторые основные компоненты для улучшения и достижения оптимальной производительности сервера.
Как и когда вы отправляете сообщение, оно в очереди на сервере до тех пор, пока приемник не повторно подключится к получению этих сообщений. Поэтому, когда вы пишете своему другу, и если они надевают’У вас есть доступ в Интернет для получения сообщений, эти сообщения являются очередями на серверах WhatsApp, и этот процесс известен как “хранить и вперед” механизм. Только когда получатель принимает сообщения, они уничтожены с сервера и удаляются из очереди. Позже, когда получатель имеет подключение к Интернету, эти сообщения доставляются им или получают получателем. Когда получатель, наконец, признает, что сообщение было получено, успешное поиск сообщения отправляется обратно на сервер WhatsApp, и это когда вы видите двойной отметок рядом с вашими сообщениями.
Эти структуры данных проходят долгий. Поэтому в следующий раз, когда ваш учитель начнет обсуждать структуры данных, обращать на себя хорошее внимание. Ага? Хорошо?
Ну, тогда увидимся в следующий раз!