Как оповестить пользователей о другом, который сейчас онлайн? - PullRequest
1 голос
/ 07 мая 2009

Я использую Yahoo Messenger для общения с друзьями. Каждый раз, когда мой друг заходит в онлайн (почти промежуточно), YM уведомляет меня. Как появился Yahoo! (и другие компании) сделать, чтобы реализовать это? Насколько я думаю , есть несколько способов решить эту проблему:

  • Извлечение: клиент постоянно (возможно, длительностью 500 мс) запрашивает сервер о том, какие пользователи (в списке пользователей) только что подключились к сети, а затем уведомляет пользователя.

  • Pushing: сервер определяет, какие пользователи подключаются к сети, а затем отправляют клиенту уведомление.

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

ОК, это только мое предположение. Как это было реализовано в реальности? Можете ли вы сказать мне?

Спасибо.

Ответы [ 8 ]

3 голосов
/ 07 мая 2009

сервер отправляет данные вниз. на сервере есть список ваших друзей и, что более важно, список тех, чей список вы находитесь. когда вы входите в систему, он просматривает этот второй список и отправляет сообщение каждому подключенному клиенту. это довольно просто на самом деле. взгляните на исходный код Pidgin ( pidgin.im ) для более подробной информации о реализации.

2 голосов
/ 07 мая 2009

Я предлагаю использовать Wireshark или любого другого инспектора сетевого трафика, чтобы точно знать, что происходит с Yahoo Messenger во время его работы.

1 голос
/ 07 мая 2009

Должна быть "push-архитектура".

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

0 голосов
/ 07 мая 2009

Я знаю, что gtalk через gmail и Facebook использует комету . это похоже на хорошую технику, но это дорого. это хороший учебник о PHP

0 голосов
/ 07 мая 2009

Когда вы входите в систему, Yahoo отправляет (отправляет) «онлайн-событие» всем в вашем списке, кто также онлайн. Если соединение осуществляется по HTTP, между вами и сервером Yahoo существует обмен пинг-понгом, чтобы поддерживать соединение ( wikipedia ) - что позволяет этому проталкивать через NAT и все такое. Иначе, соединение TCP / IP сохраняется во время вашего входа в систему. Если пинг-понг не был успешным (после нескольких попыток, как вы могли бы предположить), сервер Yahoo отправляет (толкает) сообщения всем своим онлайн-друзьям, уведомляя их об «оффлайн-событии».

Итак, чтобы ответить на ваш вопрос, это толчок.

0 голосов
/ 07 мая 2009

Я согласен с другими, что вы можете просто изучить исходный код или сетевые пакеты самостоятельно, но подумайте об этом с другой точки зрения: какой подход имеет больше смысла, когда у вас сотни тысяч пользователей, а у большинства пользователей, вероятно, всего несколько десятков "приятели"?

  1. Сотни тысяч пользователей пингуют ваши серверы каждые несколько секунд = большая нагрузка
  2. Выполняйте обновления для клиентов, когда статусы их друзей изменяются, что, вероятно, происходит в гораздо меньшем масштабе - несколько обновлений каждые несколько минут.
0 голосов
/ 07 мая 2009

Используется технология, аналогичная Buddy Check , но только позволяет узнать, хочет ли пользователь вас знать. Но Приятель Чек на самом деле дает вам настоящую правду.

0 голосов
/ 07 мая 2009

Возможно долгоживущие HTTP-запросы. Клиент IM вызывает метод HTTP на сервере, но сервер не отвечает, пока не произойдет обновление. В этот момент он отвечает «update», и клиент IM затем вызывает другой HTTP-метод для получения обновления.

Реальный толчок невозможен, потому что многие (большинство?) Человек в Интернете отстают от NAT-маршрутизаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...