# chat: wann http und wann sockets verwenden?



## zd (13. Sep 2004)

hi,

wir wollen einen chat programmieren.
die clients laufen als applets, der server als servlets.
jetzt sind wir am überlegen, ob wir die netzwerkkommunikation über http oder über sockets laufen lassen.
gibt es sinnvolle gründe keine sockets zu verwenden?
gibts mit sockets probleme bei usern hinter einer firewall oder einem proxy?


----------



## Bleiglanz (13. Sep 2004)

>>gibt es sinnvolle gründe keine sockets zu verwenden?

ja firewalls + security probleme beim client (signierte jars usw)

>>gibts mit sockets probleme bei usern hinter einer firewall oder einem proxy?

ja


----------



## meez (13. Sep 2004)

Noch eine kurze Anmerkung...
HTTP ist ein L6 Protokoll...Das hat sowviel mit Sockets am Hut, wie Frühstück mit Graf Zeppelin...
HTTP wird in Java halt auch über Sockets angewendet....Daher ist die Frage unsinnig. Der Ziel-Port des Sockets ist dann halt einfach 80....


----------



## zd (13. Sep 2004)

wir haben eine http implementierung (aus dem oreilly buch java servlet programmierung), die so aufgebaut ist:
alle clients versuchen ständig, über die doGet Methode des httpservlets, neue nachrichten abzuholen.
der server blockt diese methode solang, bis es eine neue nachricht gibt, die an alle clients weitergeleitet wird.
die clients posten nachrichten über die http doPost methode.
damit haben wir das problem, dass wir keinen _ungefragten_ kontakt zu _einzelnen_ clients bekommen (z.b. nötig, wenn ein user ein querry zu einem anderen öffnen will).

mit sockets könnten wir uns am server eine liste mit allen clients halten, die dann gezielt angesprochen werden können.

wenn bei einer firewall der entsprechende port freigegeben ist, funktioniert das dann?


----------



## Bleiglanz (13. Sep 2004)

>>wenn bei einer firewall der entsprechende 
>>port freigegeben ist, funktioniert das dann?

nein nicht unbedingt

das client-applet braucht das recht, überhaupt einen socket zu öffnen...


----------



## zd (13. Sep 2004)

>> das client-applet braucht das recht, überhaupt einen socket zu öffnen...

und wie kriegt es das? ist das problematisch zu machen?


----------



## Bleiglanz (13. Sep 2004)

google nach "signiertes applet" oder sowas


----------



## zd (13. Sep 2004)

ok, ich werd mal gucken.
danke


----------



## Gast (13. Sep 2004)

ähm.. und was is wenn man nen normalen Socket über Port 80 laufen lässt? )


----------



## Bleiglanz (14. Sep 2004)

> .. und was is wenn man nen normalen Socket über Port 80 laufen lässt? )



das geht nicht, da läuft ja schon der Webserver...

prinzipiell aber die richtige Lösung, jedes Applet darf auch ohne Rechte Zeugs vom Webserver nachladen - das Problem bleibt der Pull, d.h. der Server soll den Client(=Applet) asynchron benachrichtigen, wenn ein Eintrag im Chat gemacht wird...

usw.


_edited by thE_29: quote tags repariert_


----------



## Bleiglanz (23. Dez 2004)

thx


----------



## progster (3. Aug 2006)

Ich mach mal diesen Thread nochmal aktuell weil er auch genau mein Problem behandelt.

Meine Anwendung mit ner Applet - Servlet Kommunikation ist zwar kein Chat, aber ich habe damit die selben Probleme zu bewältigen.

Bei mir is es folgendermassen:

Meine Webseite ist in zwei Frames aufgeteilt. Im linken Frame befindet sich das Applet und im rechten Frame befindet sich ein html - Formular.

Wenn ich nun einen bestimmten Button im Applet klicke öffne ich über 
getAppletContext().showDocument(webURL, "mainFrame"); das html - Formular im rechten Frame.

Wenn im Formular dann irgendwann Daten eingegeben wurden müssen diese wieder zurück an das Applet gesendet werden. 


Bisher habe ich das http - tunneling verwendet da ich so ja keine Probleme mit Firewalls habe.
Nun bin ich dann her gegangen und habe in relativ kurzen Abständen das Applet veranlasst beim Servlet nachzufragen ob sich eingegebene Daten vom html - Formular auf der Serverseite befinden. 


Das blöde ist ja dass ich ständig netzwerktranser habe und das Servlet unter einer ziemlichen Last steht.

Das Problem ist ja das selbe wie beim Chat. Das ganze muss asynchron laufen. Oder anders rum, wie schaffe ich es die eingegebenen Daten vom Formular wieder zurück an das Applet zu schicken.
Es müsste am besten so sein dass das Servlet die Daten verteilt und nicht das Applet ständig nachfragt ob Daten vorhanden sind. Aber so müsste ich wahrscheinlich mit sockets arbeiten oder? - und dann habe ich wieder Problem mit den Firewalls.

Ich habe mir mal auf www.antenne.de den Chat angesehen. Wie machen die denn das? Da hab ich den PFW drauf und es hat trotzdem geklappt, obwohl ich nur den Browser zugang zum Inet gegeben habe. Ist das auch so gelöst wie ich das gemacht hab? Ich versteh das irgendwie nicht.

Ich hoffe mein Problem ist rüber gekommen und Ihr könnt mir helfen.


Viele Grüsse


----------

