2009-05-07 15 views
1

Ich benutze Yahoo Messenger, um mit meinen Freunden zu chatten. Jedes Mal, wenn ein Freund von mir online geht, wird YM mich benachrichtigen. Wie hat Yahoo! (und andere Firmen), um dies zu implementieren? Soweit ich erraten , gibt es einige Techniken, dieses Problem zu lösen:Wie können Benutzer über einen anderen Benutzer benachrichtigt werden?

  • Pulling: Client ständig (500 ms Dauer, vielleicht) fragt Server, über die Benutzer (in der Liste der Benutzer) gerade online geschaltet und dann benachrichtigen Sie den Benutzer.

  • Pushing: Der Server bestimmt, welche Benutzer online kommen und sendet eine Benachrichtigung an den Client.

Der zweite Ansatz ist viel akzeptabler. Die Daten des Benutzers können eine Liste seines Freundes enthalten (der ihn zu seinen Listen hinzugefügt hat), und das Anmeldeereignis wird ausgelöst. Die Server-App sendet eine Benachrichtigungsnachricht an alle Benutzer in dieser Liste.

OK, das ist nur meine Vermutung. Wie wurde es in der Realität umgesetzt? Kannst du mir erzählen?

Vielen Dank.

+0

Woher wissen Sie, dass YM Sie "fast sofort" benachrichtigt? Das ist nur Ihre Meinung darüber, wann es Sie benachrichtigt. –

+0

Ich habe versucht, ich melde mich an und dann "sofort" sehe die Benachrichtigung auf dem Desktop meines Zimmerkollegen Freund! – Vimvq1987

Antwort

0

Möglicherweise langlebige HTTP-Anfragen. Der IM-Client ruft eine HTTP-Methode auf dem Server auf, aber der Server antwortet erst, wenn eine Aktualisierung erfolgt ist. An diesem Punkt antwortet es mit "update" und der IM-Client ruft dann eine andere HTTP-Methode auf, um das Update zu erhalten.

Echte Push ist nicht möglich, weil viele (die meisten?) Menschen im Internet hinter NAT-Routern sind.

2

Ich empfehle die Verwendung von Wireshark oder einem anderen Netzwerk-Traffic-Inspektor, um genau zu sehen, was auf Yahoo Messenger läuft, während es läuft.

0

Es verwendet eine ähnliche Technologie wie Buddy Check, aber nur lässt Sie wissen, wenn der Benutzer will, dass Sie wissen. Aber Buddy Check gibt Ihnen tatsächlich die Wahrheit.

0

Ich stimme mit anderen überein, dass Sie den Quellcode oder Netzwerkpakete selbst untersuchen könnten, aber denken Sie darüber aus einer anderen Perspektive: welcher Ansatz macht mehr Sinn, wenn Sie Hunderttausende von Benutzern haben und die meisten Benutzer wahrscheinlich nur ein paar haben Dutzend "Freunde"?

  1. haben Hunderttausende von Benutzern Ihre Server alle paar Sekunden = viel Last Pingen
  2. Push-out-Updates an Kunden, wenn Status ihres Freundes, ändern, die auf einem sehr viel kleineren Maßstab geschieht wahrscheinlich - ein paar Updates alle ein paar Minuten.
1

Sollte "Push-Architektur" sein.

Server können für viele Benutzer kein konstantes Ziehen tolerieren.

3

Der Server drückt die Daten nach unten. Der Server hat eine Liste Ihrer Freunde und, was noch wichtiger ist, eine Liste, auf deren Liste Sie sich befinden. Wenn Sie sich anmelden, wird die zweite Liste durchsucht und eine Nachricht an jeden verbundenen Client gesendet. es ist wirklich ziemlich einfach. Werfen Sie einen Blick auf den Quellcode von Pidgin (pidgin.im) für genauere Implementierungsdetails.

0

Wenn Sie sich anmelden, sendet Yahoo ein Online-Ereignis an alle Personen auf Ihrer Liste, die auch online sind.Wenn die Verbindung über HTTP ist, gibt es einen Ping/Pong-Austausch zwischen Ihnen und Yahoos Server, um die Verbindung aufrecht zu erhalten (wikipedia) - was ermöglicht, dass dieser Push durch NATs und so weiter geschieht. Andernfalls wird eine TCP/IP-Verbindung für die Dauer Ihrer Anmeldung am Leben erhalten. Wenn der Ping/Pong nicht erfolgreich ist (nach einer Anzahl von Wiederholungen, würden Sie annehmen), sendet der Yahoo-Server Nachrichten an alle Ihre Online-Freunde und benachrichtigt sie über das "Offline-Ereignis".

Also um Ihre Frage zu beantworten, ist es ein Stoß.

0

Ich weiß, gtalk über Google Mail und Facebook verwendet comet. Das sieht nach einer guten Technik aus, ist aber teuer. Dies ist ein good tutotial etwa in PHP

Verwandte Themen