[Ajax / Java] Ein Webchat

Kommentare anzeigen Worklog abonnieren

Worklogs [Ajax / Java] Ein Webchat

El piedra miliar (Der Meilenstein)

Mittwoch, 6. März 2013 von Eingeproggt

Servus,

schneller als angenommen (muss wohl an der zusätzlichen Motivation durch den Worklog im geöffneten Blitzforum liegen Laughing ) gibt es einen Meilenstein über den ich berichten will.

Also kurz gesagt: Chat-Grundfunktion steht.
Das muss auch Grund genug sein, einen Screenshot zu posten auch wenn er nicht besonders graphisch anspruchsvoll ist:
user posted image

Anmerkung zu dem Bild im Speziellen:
Die Userliste (Online / Offline) ist in Paint nachbearbeitet (sprich ein graues Rechteck drüber gezeichnet).
Das liegt daran dass in der Userliste mittlerweile schon "echte" Namen stehen. Ich habs "nebenbei" geschafft, den Java-Server an MySQL anzubinden (JDBC sei Dank) und somit stehen da schon "reale User" - die aber weder vom Chat noch vom blitzforum wissen und wo ich denke dass die es lieber haben wenn ich ihre Existenz erstmal nicht veröffentliche.

Und natürlich Erklärungen zum System:
Die grauen Fenster sind dynamisch erzeugt und liegen über einem (an die Fenstergröße angepassten) iFrame. Das erklärt auch warum ich vorkurzem dieses Problem hatte.

Das Interessanteste, der Ajax Push ist im Prinzip ganz einfach (wobei ichs wohl sogar noch komplexer gemacht habe als nötig).
Normale Verarbeitung wäre ja grob gesagt: Eingehende Verbindung annehmen, verarbeiten, Antwort senden, Verbindung schließen.
Meine Lösung (in der Fachwelt "Long Polling" genannt) ist: Eingehende verbindung annehmen, Socket-Daten davon zwischenspeichern. Wenn nun irgendwas passiert was der Server dem Client mitteilen muss, sendet es der Server als "verzögerte Antwort" auf die gespeicherte Verbindung. Zitat von Wikipedia dazu was den Nagel auf den Kopf trifft:
Zitat:

At the end of the processing of the response, the browser creates and sends another XHR, to await the next event. Thus the browser always keeps a request outstanding with the server, to be answered as each event occurs.

Das ganze muss nochmal überdacht werden fürchte ich, da sich einige Threads (am Server) nicht beenden bei der Geschichte. Aber das sollte ein "normaler Bug" sein den ich schon ausbügeln werde. Der Screenshot zeigt den 2. (erfolgreichen) Testlauf, da is klar dass noch alles etwas zu wünschen übrig lässt.

Wie gehts weiter?

Erstmal bissi den Code aufräumen und debuggen ^^
Danach hab ich freie Wahl welchen der folgenden Punkte ich angehe:
-) Chat mit mehreren Personen (>2 Teilnehmer - sollte theoretisch jetzt schon gehn, aber zumindest sowas wie "Chat Einladungen", "Channel verlassen" müsste dann klarer umgesetzt werden)
-) Offline-Messages
-) Einstellungen (Anzeige-Name, Statuswechsel, Blocklist, etc.)
-) Anbindung an php (Da bin ich auch gespannt wie ichs mache. Also folgende Überlegung: Wenn jemand auf der Website sich einloggt is er "online". Das heißt php müsste dem Java-Server mitteilen dass ein User jetzt den Status von Offline zu online wechselt [und java müsste dies eben per Push an alle Freunde des Users mitteilen])
-) Design-Aufwertung bzw. GUI ausbauen

Ich weiß, die Weltherrschaft an sich zu reißen ist eine sehr einsame Tätigkeit, aber ich würde mich trotzdem freuen wenn ein paar Reaktionen auftauchen jetzt wo ihr n Bild seht Razz Ich bin auch gerne bereit, mehr über meine Java-Klassen-Struktur, Verarbeitung von Cookies (wer versucht per Ajax Cookies zu manipulieren wird merken dass es nicht so einfach ist) und sonstwas zu erzählen - einfach fragen!
Aber fragt mich nicht warum ich im Worklog-Titel mit Spanisch angefangen hab Razz

mfG, Christoph

Hallo Welt

Dienstag, 19. Februar 2013 von Eingeproggt

Servus,

Ich hab leider viel zu viel auf einmal zu erklären bei diesem Projekt - noch dazu wo es ja nicht BB ist und ich bei einigen Formulierungen wohl aufpassen muss dass sie für jedermann verständlich bleiben. Aber ich versuchs einfach mal.
Bei näheren Fragen einfach melden. Alles kann ich hier im ersten Beitrag nicht beschreiben.

Verwendete Programmiersprachen / Techniken

Wie im Titel schon erwähnt Ajax und Java. Das hab ich aber nur geschrieben um den Titel "abzukürzen". Hinter Ajax verbirgt sich ja Javascript und XML, in meinen Augen auch (X)HTML und CSS. Halt das typische Client-seitige Web-Gedöhns Wink
Serverseitig bastel ich n Server in Java. Jedoch möchte ich dazu sagen dass es definitiv kein Webserver wird! Nur ein Chat-Server. Die Wahl fiel relativ leicht, da php irgendwie für diese Aufgabe ungeeignet ist. Ich mein bei jeder Anfrage alle Daten aus der Datenbank laden is halt einfach nicht so "cool" wie alle (bzw. die am häufigsten benötigten) Daten im RAM zu haben 8)

Verbunden wird das ganze Ding einfach über HTTP und ein bisschen Konfigurations-Hick-Hack damit der Java-Server parallel zu XAMPP laufen kann.

Auch wenn ich nicht genau erklären kann warum, möcht ich erwähnen dass ich keine weiteren Hilfsmittel wie jQuery verwende (ist halt einfach so mein persönlicher Dachschaden alles selber zu machen Laughing )
Und ich verwende kein HTML5... Leider... Ich würde gerne, bin mir aber bezüglich Verbreitung / Unterstützung noch nicht ganz sicher und entschied mich daher für den altmodischen Weg.

Ziel

Jetzt wirds peinlich... Das Ziel ist noch nicht so ganz klar. Also ursprünglich war der Chat für meine Website geplant (Die ich jetzt nichtmal verlinke, Werbung in den Worklogs is ja nicht erlaubt Wink ). Doch zwischendurch kamen die typisch übermotivierten Ideen auf man könnte den Chat doch frei verfügbar machen so dass ihn jeder auf seiner Website einbinden könne. Das ist noch nicht beschlossene Sache, ich denke eher nicht dass ich es wirklich so "sauber" durchziehe dass das am Ende ohne Probleme möglich ist Sad

Jedenfalls, warum nicht bestehende Chats verwenden?
Einfache Antwort: Wir sind Programmierer, keine 0815-User Razz
Umständliche Antwort: Mir waren alle mir bekannten Lösungen irgendwie nicht "gut genug". Vor allem wenn es darum geht sich in dem Chat anzumelden / registrieren hat man bei vielen frei verfügbaren Lösungen Probleme. Und ein Ziel des hier vorgestellten Chats soll sein dass man im Chat mit den Login-Daten meiner Website reinkommt. Klar, das steht wieder im Widerspruch zum Ziel mit "für allen verfügbar". Ihr seht, es wird jetzt schon kompliziert Razz

Fortschritt & Planung

Das was im ersten Abschnitt über Programmiersprachen erzählt wurde, steht schonmal. Zumindest kann ich also sagen dass mein Konzept im Grunde funktioniert Wink
Zum Testen lädt JS mal beim Laden der Website eine Userliste, bestehend aus Dummy-Einträgen, vom Server. Die Liste kommt als XML-Daten daher (dazu in einem der nächsten Worklog-Einträge mehr), wird von JS zu einem HTML-Fenster mit Inhalt verwurstet und geht schon.

In nächster Zeit kommt dann der eigentlich große Brocken, nämlich das chatten. Wo ich mir persönlich ein wenig in die Hosen mache ist es, ein Ajax Push selbst zu realisieren.

Bilder

Leider noch keine... Bisher ist das einzige was man graphisch sieht 2 graue Rechtecke am Client (Website).

Aber ich bin lange genug dabei um zu wissen wie das abläuft - Aufmerksamkeit bekommt man erst mit Screenshots von daher werdet ihr schon noch was zu sehen bekommen! (Und wenns n Screenshot vom Code ist damit man mir glaubt dass ich kein Dampfplauderer bin Razz ) Ich verspreche aber nicht wann. Das Projekt geht mehr oder weniger schon seit November und ich hab da erst 4 oder 5 Tage "effektiv" reingesteckt seither. Wenn das so weitergeht Rolling Eyes

Also, es war mir eine Ehre der BB-Gemeinde meine Java- und Javascript-Spielereien vorzustellen. Bis zum nächsten mal,
Christoph