2016-01-25 1 views
1

В настоящее время я изучаю веб-программирование. Я начал больше узнавать об интернет-протоколах и других интернет-приложениях.Как работает whatsapp?

Так что я просто хочу понять, как WhatsAp работает? Его использование xmpp и просто код для общения с сервером. Но что происходит на заднем плане?

Как whatsapp разговаривает с сервером? Что такое ip-сервер whatsapp xmpp? Какой формат используется при использовании этого приложения при работе с сервером? И почему никто не может напрямую использовать ПК? Если whatsapp является программным обеспечением для общения, это означает, что я могу общаться с сервером с любого устройства или любого другого пользователя? Но я не мог найти никакого примера.

И, наконец, после того, как я зарегистрировался в whatsapp с моим номером телефона в первый раз, он отправил мне sms и сделал проверку. Но после этого, как то, что узнал меня? От моего адреса mac? Или из любого другого специального ключа?

Что произойдет, если распознающий ключ или адрес mac совпадает с двумя разными устройствами с двумя разными адресами ip? Может ли сервер понять это? Кто-нибудь из них взял сообщение или и то, и другое?

Так что я просто хочу узнать, что происходит на фоне whatsapp?

Заранее спасибо ...

успокойся, я не пытаюсь взломать WhatsApp серверов;): р

+1

Вы просите о внутренней работе WhatsApp? Только люди, которые там работают, могут ответить на эти вопросы. – DMH

+0

Я слышал что-то вроде whatsapp, делающего идентификацию по адресу mac. Если только люди, работающие в компании, знают, как это программное обеспечение работает тогда, как люди изучают это? Я просто хочу узнать всю информацию, которую можно узнать и найти ... – Fym

+0

Вы не знаете, как работает WhatsApp, вы узнаете о серверах, протоколах связи и прочем. – DMH

ответ

1

WhatsApp или большинство других приложений обмена сообщениями редко работают на одноранговой основе. Поэтому он не будет открывать соединение (с вашего устройства) с каждым из устройств ваших друзей. Вместо этого ваше устройство подключается к своему серверу. Затем он может использовать собственный протокол TCP или, возможно, HTTP для передачи ваших сообщений на сервер. Сервер в ответ отправит их на устройства ваших друзей. Если у вашего друга открылось приложение или, по крайней мере, работает процесс приложения, может существовать живое соединение с сервером. WhatsApp будет использовать это соединение для отправки им своих сообщений. Если их приложение «отключено», они могут вместо этого отправить им push-уведомление. WhatsApp выбрал Erlang язык, предназначенный для написания масштабируемых приложений, предназначенных для устранения ошибок. Эрланг использует абстракцию, называемую моделью Actor, для ее параллелизма - http://en.wikipedia.org/wiki/Act .... Вместо традиционного подхода с общей памятью, участники обмениваются сообщениями, отправляя друг другу сообщения. Актеры, в отличие от нитей, рассчитаны на легкий вес. Актеры могут находиться на одной машине или на разных машинах, а абзацы, передающие сообщения, работают для обоих. Простая реализация WhatsApp может быть: Каждый пользователь/устройство представлен как актер. Этот субъект отвечает за обработку входящих сообщений пользователя, как он сериализуется на диск, сообщения, которые отправляет пользователь, и сообщения, которые пользователь получает. Предположим, что Алиса и Боб друзья на WhatsApp. Итак, есть актер Алисы и актер Боба.

Проследим ряд сообщений, текущих взад и вперед: Алиса решает сообщить Бобу. Телефон Алисы устанавливает соединение с сервером WhatsApp, и установлено, что это соединение, безусловно, связано с телефоном Алисы. Алиса теперь отправляет через TCP следующее сообщение: «Для Боба: гигантский монстр атакует мост Золотых Ворот». Один из серверных серверов WhatsApp десериализует это сообщение и доставляет это сообщение актеру по имени Алиса. Алиса актер решает сериализовать это и хранить его в файле «Alis's Sent Messages», хранящемся в реплицированной файловой системе, чтобы предотвратить потерю данных из-за непредсказуемого развращения монстров. Затем Алиса решает передать это сообщение Бобу актеру, передав ему сообщение «Msg1 от Алисы: гигантский монстр атакует мост Золотых Ворот». Алиса актер может повторить с экспоненциальным отступлением, пока Боб актер не признает получение сообщения. Боб актер в итоге получает сообщение от (2) и решает сохранить это сообщение в файле под названием «Входящие Боба». После того, как он сохранит это сообщение надолго, Боб актер признает получение сообщения, отправив Алисе актеру сообщение своего собственного слова «Я получил Msg1». Алиса, актер теперь может прекратить попытки повторить попытку. Боб актер затем проверяет, имеет ли телефон Боба активное соединение с сервером. Это происходит, и поэтому Боб актер передает это сообщение на устройство через TCP. Боб видит это сообщение и отвечает «Для Алисы: создадим гигантских роботов для борьбы с ними». Это теперь получает Боб актер, как показано на шаге 1. Боб актер повторяет шаги 2 и 3, чтобы убедиться, что Алиса в конечном итоге получает идею, которая спасет человечество.

WhatsApp на самом деле использует протокол XMPP вместо более совершенного протокола, который я изложил выше, но вы поняли суть.

Для вашего собственного использования вещи, которые необходимо учитывать: Возможно, у вас нет контроля над клиентами, отправляющими GPS-координаты на сервер каждые 10 минут. Если ваш клиент работает на мобильном устройстве, ОС может решить голодать от ресурсов или просто убить ваш процесс. Вам необходимо сохранить состояние для клиентов, подключенных к вашему серверу, чтобы вы могли отправлять сообщения активным клиентам, когда выполняются ваши требования. Это небольшая модификация примера приложения «Comet app», которое имеет почти все рамки. Установление TCP-соединения - это не очень большая трата ресурсов со стороны клиента или со стороны сервера. Если ваша экосистема программного обеспечения сервера поддерживает неблокирующий IO, состояние, требуемое для каждого соединения, является крошечным. Вы можете поддерживать более 100 тыс. Подключений в посредственной коробке, если будете стараться. Если вы работаете в JVM Netty, вам может помочь. У Python есть Twisted and Tornado. C++/C может использовать epoll, kqueue или выбрать, если вы находитесь в системе * NIX. Golang поддерживает большое количество подключений через стандартную библиотеку. Мы рассмотрели вертикальную масштабируемость, например, сколько пользователей вы могли бы поддерживать в простой коробке. Если вы действительно хотите масштабировать и создавать распределенную систему, поддерживающую состояние, вы можете рассмотреть Erlang (с OTP) или другие реализации модели Actor, такие как Akka (JVM), которая также поддерживает удаленные сообщения. Комбинация источников событий и архитектуры передачи сообщений может обеспечить вам всю необходимую масштабируемость по горизонтали.