PHP Jabber: wenn ich anmelden und überprüfen Nachrichten und trennen, auf der anderen Endnutzern werde ich als nicht verbunden angezeigt

StackOverflow https://stackoverflow.com/questions/847854

  •  21-08-2019
  •  | 
  •  

Frage

Bin nicht sicher, ob das, was ich tue, ist absolut richtig. Aber hier geht:

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

Das Problem ist jetzt, dass, wenn der Benutzer wünscht, eine Nachricht zu senden, ist es einfach, lief php, in denen ich auf Jabber-Server verbinden und die Nachricht senden. Das Problem entsteht, wenn ich für eine Nachricht warte. Denn wenn ich mich anmelden und überprüfen Nachrichten und trennen, auf der anderen Endnutzern ich als nicht verbunden angezeigt wird.

Bin nähere ich dieses Problem in einer falschen Weise? Soll ich mit dem Jabber-Server (via Javascript) anstelle einer PHP-Schicht dazwischen direkt verbinden? Wie empfangen Nachrichten über PHP?

War es hilfreich?

Lösung

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

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

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

oder vielleicht gibt es eine API, die mit, das hilft.

direkt an den Jabber-Server über Javascript Verbinden
ich schlief möglicherweise durch die neuesten Ajax-Erfindungen, aber afaik nur mit dem Host der Source-HTML-Datei stammt aus (ohne Berücksichtigung von Greasemonkey und Addons) kommunizieren können. keine unterschiedlichen Domänen, keine unterschiedlichen Ports, period. , wenn Sie Ihren Jabber-Server zu lehren gehen, wie Sie Ihre chatpage-html an den Browser zu dienen, wird diese erhalten problematisch. Darüber hinaus verbunden bleibt nicht funktioniert sogar, denn das würde mehrt-Antworten erfordern. diese werden nur von mozilla unterstützt und aus diesem Grunde das hässliche Entlein COMET sogar in erster Linie vorhanden ist. Komet selbst ist eine Abhilfe, die Unfähigkeit zu vermeiden Verbindungen zu halten, während Übertragung von Daten.

Andere Tipps

Ich habe es nicht ausprobiert, aber Sie könnten unter xmpphp suchen möchten . Zweitens sollten Sie in dem XMPP-Server (auch bekannt als ein Jabber-Server) so lange angemeldet halten die Benutzer zu betrachten, wie sie in Ihrer Website angemeldet sind. Sie wollen wahrscheinlich ein Timeout von irgendeiner Art haben, falls sie verlassen Ihre Website und kommen nicht zurück.

Was, ob Sie über JavaScript verbinden sollen, sehe ich nicht, warum kann man nicht. Ich würde vorschlagen, dass Sie gehen, was auch immer scheint die einfachste zu Ihnen. Sie könnten überprüfen möchten out Strophe , die ich über gute Dinge zu hören, für diesen Fall.

Die einzige XMPP-Bibliothek, die ich intensiv genutzt habe, obwohl Stock , aber das erfordert mit python und Kamaelia .

So die Frage, soweit ich das beurteilen kann, ist, dass, wenn der Jabber Benutzer am anderen Ende antwortet. Das Problem gibt, zumindest teilweise ist, dass der Benutzer auf dem Jabber-Server an einem anderen Benutzer reagiert, aber Sie wollen, dass der PHP-Skript mir bewusst sein, dass diese Reaktion stattgefunden hat, ohne die Verbindung offen zu halten (was sinnvoll, da das Skript macht ausgeführt wird, wahrscheinlich nicht mehr).

Eine Option, wenn auch ein wirklich albern, ist:

  • Haben Sie 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,

  • AJAX verwenden, um 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, die die gleiche Skript je 10 Sekunden oder so Pings, Check-in, um zu sehen, ob es Meldungen sind. Wenn ja, bekommen sie zurück an den Client und Ausgabe an den Benutzer übergeben.

Es gibt nur zwei Probleme mit der oben:

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

2) Eine Client-Seite-Schleife, die wahrscheinlich AJAX-Anfragen alle 3 Sekunden macht wären ein großer Drain sein.

Lösung 2:

Openfire Jabber-Server. Es kommt mit einem Web-Chat-Client integriert, und es hat ein Addon Fastpath genannt, was gemeint ist, HTML-basierter Chats auf der Client-Seite zu behandeln (wie die „jetzt mit einem Agenten chatten!“ -Funktion auf zu vielen Support-Seiten.)

Wir verwenden diese bei der Arbeit, und es ist sehr anpassbar, kann mit anderen Skripten (zum Beispiel, wenn Sie einen Skript mögen, die in den Benutzerdaten aus dem Login füllt, oder einige benutzerdefinierten Avatar fügen hinzu, oder was auch immer) integriert werden, und es (Openfire) hat Tonnen von anderen Erweiterungen und Add-Ons, die, wenn dies nicht das, was Sie wollen, sie haben wahrscheinlich, was Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top