Web-Chat über XMPP-Client
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
apache
benutzer
bibliothek
effekt
erfinden
fehler
frage
http
kommunizieren
lernen
nutzen
port
problem
rad
sache
server
strophe
url
verbindung
webseite
-
Hallo!
Ich schreibe das mal hier bei Javascript rein, weil ich nicht so genau weiß, in welche Kategorie es passen könnten - das Problem ist relativ umfangreich und beinhaltet viele Komponenten. Aber Javascript ist letztenendes das Frontend, bzw. das Frontend soll in Javascript geschrieben sein.
Zum Problem: Ich möchte auf einer Webseite einen (Light-)XMPP-Client einbauen. Das Problem ist, dass ich aktuell gar nicht so richtig weiß, wo ich da anfangen soll. Einen XMPP-Server(Prosody) habe ich bereits aufgesetzt, der läuft auch ohne Probleme. Das Protokoll ist mir bekannt. Aber wie fahre ich dann fort? Wie bekomme ich die Nachrichten von der Webseite am elegantesten zum XMPP-Server?
Ich habe bereits überlegt, mit python/perl ein Backend zu schreiben, welches dann zum XMPP-Server verbindet und Nachrichten empfängt/liest. Das Problem ist, dass - wenn ich 1000 Benutzer habe, im wesentlichen auch 1000 Instanzen laufen müssten, was weniger vorteilhaft für die Ressourcen des Servers wäre. Auch die Möglichkeit, ,das ganze über eine Instanz, welche nur die benötigten Daten aus einer SQL-Tabelle ausliest und dann an den Server sendet, während ein php-Script diese dann liest/schreibt wäre denkbar. Allerdings hätte ich da Bedenken, was die Privatsphäre der Nutzer angeht.
Eine weitere Möglichkeit wäre wohl, die Verbindung komplett mit PHP zu initiieren, was jedoch das Problem aufwirft, dass diese Verbindung dann ja nicht persistent wäre, der Benutzer also nur kurz online käme, eine Nachricht sendet und dann wieder offline geht, was ja nun auch nicht Sinn und Zweck der Sache sein soll. (Das ganze soll schließlich auch mit handelsüblichen XMPP-Clients nutzbar sein.)
Auch den Umgang mit Web-Sockets habe ich in Betracht gezogen, wobei alles, was ich darüber bisher gelesen habe, nicht besonders aussichtsreich war. Dazu kommt, dass eine Webseite ja für gewöhnlich auch hin und wieder mal neu geladen werden muss, wodurch die Verbindung abbricht.
Hat sich schon mal jemand damit beschäftigt? Kann mir da jemand nützliche, ausführliche Tipps geben oder zumindest Lektüre dazu empfehlen?
Was ich nicht möchte:
- Ich möchte keinen fertigen XMPP-Client wie Converse.js oder JWChat oder ähnliches nutzen.
- Ich möchte keinen reinen SQL- oder sonstigen Chat.
Danke im Voraus. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn du serverseitig die Verbindungen zum XMPP-Server verarbeiten willst (wie z.B. bei WebSockets auch nötig wäre), dann kann das auch mit sehr vielen Verbindungen noch effizient funktionieren. Allerdings müsstest du dabei dann schon einige Gedanken investieren.
Viel einfacher ist es BOSH zu nutzen: sieh dir strophe.js an, das kann mit solch einem Endpunkt kommunizieren und ist nicht mehr als eine XMPP-Bibliothek. Das ist wohl das einfachste und auch sinnvollste, wie du deinen Chat bauen kannst … PHP o.ä. ist dabei übrigens nicht nötig. -
hackyourlife schrieb:
Der einfachste Weg wäre wohl, etwas fertiges zu nehmen. Jedoch würde dabei der Lern-Effekt vollständig flöten gehen. Deshalb will ich es selbst machen. Zudem müsste ich mich dann wieder durch etliche Zeilen fremdcode wälzen. Und es bringt viele Funktionen mit, welche ich möglicherweise gar nicht brauche, was die Webseite dann wieder riesig macht - was ich vermeiden möchte. Dazu kommt dann noch, dass ich ungern OpenSource-Projekte für möglicherweise irgendwann kommerzielle Produkte... "Zweckentfremden" möchte. Deshalb (Und aus einigen anderen Gründen) kommt eine fertige Bibliothek für mich nicht in Frage.
Viel einfacher ist es BOSH zu nutzen: sieh dir strophe.js an, das kann mit solch einem Endpunkt kommunizieren und ist nicht mehr als eine XMPP-Bibliothek. Das ist wohl das einfachste und auch sinnvollste, wie du deinen Chat bauen kannst ? PHP o.ä. ist dabei übrigens nicht nötig.
hackyourlife schrieb:
Mein anfänglicher Gedanke war ja, auf dem Server eine jeweilige Instanz eines minimalen Clients für jeden Benutzer zu starten - und das wäre wohl nicht sehr effizient umzusetzen. Eine Instanz jedoch, welche alle Verbindungen entgegen nimmt und an den XMPP-Server weiter leitet, wäre denkbar.
Wenn du serverseitig die Verbindungen zum XMPP-Server verarbeiten willst (wie z.B. bei WebSockets auch nötig wäre), dann kann das auch mit sehr vielen Verbindungen noch effizient funktionieren. Allerdings müsstest du dabei dann schon einige Gedanken investieren.
hackyourlife schrieb:
Über BOSH habe ich schon häufiger was gelesen. Ist das nicht quasi eine HTTP-Schnittstelle zum XMPP-Server? Wenn ich mir die XEP-0206 durchlese, sieht das ganze nicht sehr kompliziert aus. Wobei ich mich da frage, wie das ganze mit dem Cross-Domain-Zeugs läuft. Schließlich kann ja der XMPP-Server nicht gleichzeitig wie der Apache auf Port 80 lauschen, wodurch ich wieder eine andere Domain angeben müsste, was Javascript ja meines Wissens nicht so mag.
Viel einfacher ist es BOSH zu nutzen: -
noxious schrieb:
Eine recht interessante Argumentation. Danach dürftest du niemals in PHP programmieren, da du dort die PHP-Bibliothek nutzt usw. Und wegen Open Source usw: es handelt sich hier um ein unter MIT-Lizenz stehendes Projekt, also ist das weder ein Problem, noch nicht gewünscht, sogar ganz im Gegenteil! Aber gut, es gibt eben Leute, die das Rad ganz gern neu erfinden wollen usw., wobei die Anzahl der Fehler im dabei entstehenden Programmcode fast mit Sicherheit größer ist als z.b. bei der eben verlinkten Bibliothek.
hackyourlife schrieb:
Der einfachste Weg wäre wohl, etwas fertiges zu nehmen. Jedoch würde dabei der Lern-Effekt vollständig flöten gehen. Deshalb will ich es selbst machen. Zudem müsste ich mich dann wieder durch etliche Zeilen fremdcode wälzen. Und es bringt viele Funktionen mit, welche ich möglicherweise gar nicht brauche, was die Webseite dann wieder riesig macht - was ich vermeiden möchte. Dazu kommt dann noch, dass ich ungern OpenSource-Projekte für möglicherweise irgendwann kommerzielle Produkte... "Zweckentfremden" möchte. Deshalb (Und aus einigen anderen Gründen) kommt eine fertige Bibliothek für mich nicht in Frage.
Viel einfacher ist es BOSH zu nutzen: sieh dir strophe.js an, das kann mit solch einem Endpunkt kommunizieren und ist nicht mehr als eine XMPP-Bibliothek. Das ist wohl das einfachste und auch sinnvollste, wie du deinen Chat bauen kannst ? PHP o.ä. ist dabei übrigens nicht nötig.
Wenn du dir nun sicher bist, das Rad neu erfinden zu wollen: BOSH sind nur XML-Daten, die du via HTTP überträgst, vermutlich via XMLHttpRequest o.ä. Wenn du willst kannst du dir da auch eine der gefühlten 1000 JS-XMPP-Bibliotheken ansehen, um davon zu lernen.
Die Sache mit Port 80: dafür gibt es ein Proxy-Modul (mod_proxy) im Apache, welches die BOSH-Anfragen an den BOSH-Server (an einem anderen Port und/oder Host) umleiten kann. -
hackyourlife schrieb:
Ich darf schon, ich möchte nur nicht. Und wenn es sinnvolle Argumente gäbe, Serverseitig auf Bibliotheken zu verzichten, würde ich auch dies tun. Da ich aber sowohl einen HTTP-Server, als auch einen Scriptspracheninterpreter geschrieben habe, gäbe es da nicht ein mal den Lern-Effekt. Bei Javascript, BOSH sieht das ganze anders aus. Meine Weigerung, mich auf OpenSource-Projekte zu stützen beruht auch nicht auf ein "Ich darf nicht", sondern auf ein "Ich möchte nicht". Dementsprechend ist es auch vollkommen egal, dass es theoretisch möglich wäre. Und offenbar ist dir meine regelmäßige Äußerung, dass es mir auch um den Lern-Effekt geht entgangen. Und in der Hinsicht sind gemachte Fehler ein Vorteil, denn nur aus Fehlern lernt man.
Eine recht interessante Argumentation. Danach dürftest du niemals in PHP programmieren, da du dort die PHP-Bibliothek nutzt usw. Und wegen Open Source usw: es handelt sich hier um ein unter MIT-Lizenz stehendes Projekt, also ist das weder ein Problem, noch nicht gewünscht, sogar ganz im Gegenteil! Aber gut, es gibt eben Leute, die das Rad ganz gern neu erfinden wollen usw., wobei die Anzahl der Fehler im dabei entstehenden Programmcode fast mit Sicherheit größer ist als z.b. bei der eben verlinkten Bibliothek.
Wir können also weiterhin die Dinge behandeln, um welche ich explizit nicht gebeten habe, um das ganze dann in eine Grundsatzdiskussion münden zu lassen, welche überhaupt nichts mehr mit dem Thema zu tun hat, oder wir vertrauen mal darauf, dass ich meine Gründe dafür habe, dass ich Dinge so machen möchte, wie ich sie machen möchte. Es gibt wohl keine zwei Meinungen, was produktiver ist.
hackyourlife schrieb:
Kurz gesagt: Du weißt es nicht? Hätten wir damit angefangen, wären wir schon fertig.
Wenn du dir nun sicher bist, das Rad neu erfinden zu wollen: BOSH sind nur XML-Daten, die du via HTTP überträgst, vermutlich via XMLHttpRequest o.ä. Wenn du willst kannst du dir da auch eine der gefühlten 1000 JS-XMPP-Bibliotheken ansehen, um davon zu lernen.
hackyourlife schrieb:
Danke, ich werde mir das mal ansehen.
Die Sache mit Port 80: dafür gibt es ein Proxy-Modul (mod_proxy) im Apache, welches die BOSH-Anfragen an den BOSH-Server (an einem anderen Port und/oder Host) umleiten kann. -
Man muss allerdings nicht alle Fehler selbst machen. Man kann durchaus auch aus den Fehlern anderer lernen.
Nacher endet das noch so.
Wenn du's unbedingt selbst machen willst, hat dir hackourlife ja schon das Stichwort BOSH gegeben.
Und sogar noch mit einen Hinweis auf XMLHttpRequest. Da sind alle Infos drin, die du brauchst um damit zu spielen.
Das "vermutlich" bezieht sich wohl auf die Art. Du kannst natürlich auch jede andere Möglichkeit von JS nutzen um mit dem BOSH-Server zu kommunizieren.
Wie auch schon gesagt: Mehr als XML ist das nicht. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage