2010-08-30 7 views
9

Wie ich an Ort und Stelle ein Facebook-like-Benachrichtigungssystem setzen kann: - A userA eine Nachricht an den userB schreibt - Ein Zuhörer auf der Datenbank leitet die Nachricht an den userB - Auf der Benutzeroberfläche von UserB erscheint die Meldung sofortein Facebook-like-Benachrichtigungssystem in PHP

Wie kann ich das in PHP tun?

Vielen Dank,

Grüße

+0

Ich schätze Ihre Ideen wirklich. Hast du ein Stück Code zu teilen? Danke nochmal. – Zakaria

+0

Es ist ein ziemlich komplexes System. Am besten probierst du es selbst aus und stellst spezifische Fragen darüber, wo du hängen bleibst. Ich würde mich freuen, Ihnen meine Standardgebühr in Rechnung zu stellen, wenn Sie möchten, dass ich sie für Sie schreibe oder eine virtuelle 1-on-1-Sitzung abhalte. – bradenkeith

Antwort

0

Man könnte dies eine von zwei Arten tun. In PHP wäre der einfachste Weg "Polling". Die neuere sauberere Methode verwendet HTTP Push mit einem Comet-Server; aber das ist nicht so toll für PHP.

Um die Abfrage zu verwenden, aktualisieren Sie einfach eine Tabelle in der Datenbank mit der Nachricht von UserA, die als an Benutzer zu liefern b gekennzeichnet ist. Sie haben ein Skript alle paar Sekunden über Ajax, die die Datenbank für die Nachricht auf Benutzer-Client abfragt. Wenn die Nachricht dort ist, füllen Sie sie aus. Dies ist sehr ineffizient.

3

Ich habe ein System, das funktioniert gut an Ort und Stelle. Es hat im Grunde die wie folgt aufgebaut:

notification_id
User_id
Modul
action_type
added_by
lesen
read_date

hinzugefügt

Dies ist eine einfache Art und Weise tun. user_id ist wer es ist, added_by ist die Benutzer-ID desjenigen, der die Aktion durchgeführt hat. Modul ist wo es durchgeführt wurde, und action_type ist was passiert ist (Kommentar, Löschen, hinzugefügt, etc). Read ist, wenn es bereits angesehen wurde, und read_date ist, wenn es angesehen wurde.

Ich habe dann eine Klasse, die das Wort auf Grundlage der obigen Werte erstellt.

Ich habe dann eine Crontab eingerichtet, die alte Benachrichtigungen in der Datenbank nach so vielen Tagen aufräumen wird.

0

Comet-Server ist nicht so einfach in PHP zu schreiben, aber es ist möglich, dies mit Schlaf zu tun. Es gibt auch Socket-Funktionen, die nützlich sein können:

Beachten Sie, dass die Frist bewusst sein sollten. Vielleicht sollten Sie nach einiger Zeit aufhören zu hängen und eine neue Anfrage machen, es sei denn, Sie können das Zeitlimit für diese Anfragen deaktivieren.

Die Lösung kann auch von der Umgebung abhängen. Sie können wahrscheinlich nicht viele nützliche Dinge auf dem üblichen Shared Webhosting tun.

+1

Das ist eine schreckliche Idee. PHP ist nicht auf lange Polling ausgerichtet. –

0

Wie von akellehe erwähnt, können Sie mit Ajax einfach nach neuen Inhalten suchen, wenn Ihre Nutzer wahrscheinlich längere Zeit auf derselben Seite bleiben. Wenn absolute Echtzeit-Lieferung keine Notwendigkeit ist, ist es viel effizienter, beim erneuten Laden der Seite nach neuen Benachrichtigungen zu suchen - insbesondere, wenn Sie einen Cache-Speicher (z.memcached) die Gesamtereignisse, die auf einen Benutzer warten und diese Zählung nur ungültig machen, wenn ihrer Benachrichtigungswarteschlange etwas hinzugefügt wird. Dies erspart Ihnen viele leere Datenbankabfragen.

7

würde ich nicht raten, entweder Polling oder versuchen, eine Push-basierte Lösung zu implementieren, PHP, wenn Sie einen beträchtlichen Verkehr haben werden. Letztendlich werden alle PHP-Prozesse blockiert und Sie können keine Web-Anfragen mehr bedienen.

Blick in node.js, cometd oder anderen Push-basierten Lösung. Wenn Sie etwas einfach brauchen und brauchen und läuft schnell zu bekommen, würde ich http://pusherapp.com/ empfehlen. Sie haben einen PHP-Client zur Verfügung und super einfache API.

0

sehr viel möglich heute. Ich weiß, dass diese Antwort sehr spät kommt, aber es wird denjenigen helfen, die diese Seite um Hilfe bitten werden. Überprüfen Sie den Link unten für ein großes Tutorial Real Time Notification Like Facebook

0

Heutzutage ist die beste Lösung, socket.io (http://socket.io/) zu verwenden. Es wählt automatisch die beste (und verfügbare!) Möglichkeit, Daten zu übertragen, einschließlich: WebSockets, Adobe Flash Socket, Ajax-Abfragen. Sie wirklich keine Sorge über die Verfügbarkeit von Kommunikationsmethoden auf der Client-Seite.