2009-05-11 10 views
3

Ich bin mir nicht sicher, ob das, was ich tue, absolut korrekt ist. Aber hier geht:PHP Jabber Stupid Frage

  1. User-Logins in dem Chat über Web-basierte Schnittstelle
  2. Benutzer werden über Comet über Aktuelles informiert
  3. Benutzer geben Details, die eine PHP-Datei liest, die mit einem Jabber-Server verbindet weiter

Nun ist das Problem, wenn der Benutzer eine Nachricht senden möchte, ist es einfach, führen Sie PHP, in dem ich mit Jabber-Server verbinden und senden Sie die Nachricht. Das Problem entsteht, wenn ich auf eine Nachricht warte. Ursache, wenn ich mich anmelden und Nachrichten überprüfen und trennen, am anderen Ende des Benutzers werde ich als getrennt angezeigt.

Komme ich dieses Problem falsch an? Sollte ich direkt eine Verbindung zum Jabber-Server (via Javascript) statt einer PHP-Schicht dazwischen herstellen? Wie erhält man Nachrichten über PHP?

Vielen Dank für Ihre Zeit.

+0

Muss ich X php-Instanzen ausführen, wenn X-Benutzer online sind? –

Antwort

0

Dies ist ein inhärentes Problem (oder Feature) mit http - es gibt keine dauerhaften Verbindungen (nicht wirklich). Sie benötigen eine Problemumgehung, es gibt keine echte Lösung.

Sie könnten es mit Java oder Flash tun, aber das ist nicht wirklich nett (Javascript 4tw!).

Die andere Möglichkeit wäre, einen Zwischen-Client zu erstellen, der Verbindungen zwischen dem Browser und dem Webserver zu Verbindungen zwischen dem Webserver und dem Jabber-Server übersetzt. chaotisch, aber möglich.

oder vielleicht gibt es eine API, die dabei hilft.

Anschluss direkt mit dem Jabber-Server über Javascript
i möglicherweise durch die neuesten Ajax-Erfindungen geschlafen, aber afaik nur mit dem Host der Source-HTML-Datei stammt aus (ohne Berücksichtigung von Greasemonkey und Addons) kommunizieren können. keine anderen Domänen, keine anderen Ports, Zeitraum. Wenn Sie Ihrem Jabber-Server nicht beibringen, wie Sie Ihre Chat-Seite mit dem Browser bedienen, wird dies problematisch. Darüber hinaus funktioniert die Verbindung nicht, da dies mehrteilige Antworten erfordern würde. diese werden nur von mozilla unterstützt, und deshalb ist das hässliche entlein COMET sogar überhaupt vorhanden. Komet selbst ist eine Problemumgehung, um die Unfähigkeit zu vermeiden, Verbindungen während der Übertragung von Daten zu halten.

+0

Ich habe Kometen, Jabber, Apache Server bereit. Das verdammte Problem ist, wie man alle verbindet? d. h., wie man Nachrichten mit xmpphp hört und sie in die Datenbank einfügt, wenn eine Nachricht kommt/die Nachricht unter Verwendung von Komet an den Benutzer sendet? Bin verwirrt. –

+0

Ich bin nicht wirklich mit dem xmpphp-Paket vertraut. Die einzige Art und Weise, wie ich daran denken könnte, all das zu erledigen, ist ein bisschen komplex.Tatsächlich glaube ich, dass Sie einen separaten Client benötigen (kein Apache-Skript, sondern ein cli/Shellscript), der über xmpphp mit dem Jabber-Server kommuniziert, alles in der Datenbank protokolliert und die Datenbank nach Nachrichten liest, die an den Jabber-Server gesendet werden , alle über Sockets (xmpphp), emulieren mehrere Jabber-Benutzer. Verschiedene PHP/Javascript/Comet behandeln die Kommunikation zwischen Client und Datenbank. Ich bin mir nicht sicher, ob das der einzige/beste Weg ist, aber mir fällt nichts ein. – stefs

1

Ich habe es nicht ausprobiert, aber Sie können sich vielleicht xmpphp ansehen. Zweitens sollten Sie in Betracht ziehen, den Benutzer so lange auf dem XMPP-Server (einem Jabber-Server) angemeldet zu lassen, wie er auf Ihrer Website angemeldet ist. Sie möchten wahrscheinlich eine Auszeit haben, wenn sie Ihre Website verlassen und nicht zurückkommen.

Ob für, ob Sie über JavaScript verbinden sollten, sehe ich nicht, warum Sie nicht konnten. Ich würde vorschlagen, dass Sie sich für das entscheiden, was Ihnen am einfachsten erscheint. Sie können für diesen Fall Strophe überprüfen, worüber ich gute Dinge höre.

Die einzige XMPP-Bibliothek, die ich ausgiebig verwendet habe, ist headstock, aber das erfordert python und Kamaelia.

+0

Ich plante, XMPPHP zu verwenden. Aber wie halte ich sie die ganze Zeit eingeloggt? Bin verloren. Was ist mit HTTP-Bindung? –

+0

Ich wollte PHP dazwischen verwenden, weil ich die Daten protokollieren und verarbeiten wollte, bevor ich sie an den anderen Benutzer sendete. –

+0

Wie bekomme ich auch die Daten? Ich glaube, PHP muss wach sein, wenn eine Anfrage kommt. Aber natürlich werde ich regelmäßig mit PHP nachsehen, damit ich keine Nachrichten mehr vermisse. Ich versuche, OpenFire zu verwenden, irgendwie brauche ich es, um eine PHP-Datei jedes Mal aufzurufen, wenn eine Nachricht ankommt. Das wäre am besten? Ist das möglich? –

0

Also das Problem, soweit ich das beurteilen kann, ist, dass wenn der Jabber-Benutzer am anderen Ende reagiert. Das Problem besteht zumindest teilweise darin, dass der Benutzer auf einen anderen Benutzer auf dem Jabber-Server reagiert, aber dem PHP-Skript bewusst sein soll, dass diese Antwort stattgefunden hat, ohne die Verbindung offen zu halten (was seit dem Skript Sinn macht) läuft wahrscheinlich nicht mehr).

Eine Option, wenn auch ein wirklich albern ist:

  • einen PHP-Skript, das eine Verbindung mit dem Jabber-Server für beide das Senden und Empfangen für den Benutzer auf Ihrer Seite Broker kann,

  • Verwendung AJAX Nachrichten für den Benutzer zu senden (das AJAX auf das obige Skript zeigen würde, würde das Skript die Nachricht senden.)

  • Haben Sie einen Javascript Endlosschleife, das das gleiche Skript je 10 Sekunden oder so Pings, Überprüfung im um zu sehen, ob es Nachrichten gibt. Wenn dies der Fall ist, werden sie an den Client zurückgegeben und an den Benutzer ausgegeben.

Es gibt nur zwei Probleme mit der oben:

1) Wenn der Benutzer nicht verbunden ist, wenn die Nachricht übertragen wird, wird der PHP-Skript noch die Meldung/bekommen?

2) Eine Client-seitige Schleife, die Ajax-Anfragen alle 3 Sekunden macht, wäre wahrscheinlich ein großer Abfluss.

Lösung 2:

OpenFire Jabber-Server. Es ist mit einem Web-Chat-Client ausgestattet und hat ein Addon namens Fastpath, das HTML-basierte Chats auf Client-Seite verarbeiten soll (wie die "Chat mit einem Agenten jetzt!" - Funktion auf zu vielen Support-Seiten).

Wir verwenden dies bei der Arbeit und es ist sehr anpassbar, kann mit anderen Skripten integriert werden (zum Beispiel, wenn Sie ein Skript wollen, das die Benutzerdetails von ihrem Login ausfüllt, oder einen benutzerdefinierten Avatar hinzufügt, oder was auch immer), und es (OpenFire) hat Tonnen von anderen Erweiterungen und Addons, die, wenn dies nicht das ist, was Sie wollen, sie haben wahrscheinlich, was Sie suchen.