2009-05-07 2 views
1

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

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

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

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

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

спасибо.

+0

Откуда вы знаете, что YM уведомляет вас «почти сразу»? Это просто ваше восприятие, когда он хочет уведомить вас. –

+0

Я пробовал, я вхожу в систему, а затем «сразу» вижу уведомление на рабочем столе моего друга по комнате! – Vimvq1987

ответ

0

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

Настоящий толчок невозможен, потому что многие (большинство?) Людей в Интернете находятся за маршрутизаторами NAT.

2

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

0

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

0

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

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

Должно быть «толчок архитектуры».

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

3

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

0

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

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

0

Я знаю, что gtalk over gmail и facebook использует comet. это похоже на хорошую технику, но ее дорого. это good tutotial about in PHP

Смежные вопросы