# Java servlet (auf Tomcat)



## Liutasil (2. Februar 2008)

Hallo!
Ich bin gerade dabei ein Browsergame zu schreiben. Dafür sind unter anderem auch Echtzeit Kämpfe geplant. 
Um das umzusetzten, möchte ich einen Java Server und einen Flash Clienten schreiben, wobei der Client zum Server connected, und der Server immer die Ereignisse (z.B. einen Angriff) an den Gegner weiterleitet.
Das Programmieren an sich dürfte dabei auch kein großes Problem werden, ich werde einfach mit XMLSockets arbeiten.
Ich habe mir auch schon ein kleines Beispielprogramm geschrieben und einen Tomcat-Server auf meinem PC installiert.
Doch wie bringe ich den Server dazu, dass er mein Programm ausführt?
das Programm muss ja im Prinzip dauerhaft ausgeführt werden, und nicht nur wenn man es über den Browser aufruft.
ich hoffe mir kann jemand helfen


----------



## lernen.2007 (2. Februar 2008)

Hallo,

servlet hat ja dafür bestimmte Methoden.
z.B. init --> Diese Methode wird bei Start des Servlets ausgeführt.
       destroy --> Falls Servlets runtergefahren wird.

Du musst zuerst mal nachschauen, was für Methode Servlet anbietet.

http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/Servlet.html

Gruß
lernen.2007


----------



## Liutasil (3. Februar 2008)

ich glaube ich habe mich oben ein bisschen falsch ausgedrückt.
Ich will kein Servlet sondern eine Socket-Application auf dem Server zum Laufen bringen


----------



## Oliver Gierke (3. Februar 2008)

Irgendwie find ich das konfus, was du vorhast. Entweder du benutzt einen Tomcat und benutzt die Sachen, die er dir anbietet (Webcontainer -> HTTP Requests) oder du schreibst einfach ein normales Java Programm, was nen Socket aufmacht und lässt das Standalone laufen.

Warum willst du beides kombinieren? Nur weil bei Tomcat "Server" draufsteht und du meinst du bräuchtest was, was "Server" heißt?

Für Socketverbindungen gibt sicherlich jede Menge Beispielcode hier im Forum. Grundsätzlich würde ich aber bei Flash vor einem Javabackend (gerade in Verbindung mit Tomcat) auf einen Webservice (in welcher Form auch immer) setzen. In Flash ist das recht einfach zu realisieren, du nimmst was bewährtes als Protokoll (HTTP) und Server (Tomcat) und auf der Serverseite gibt es auch viele Bibliotheken, die dir die Arbeit erleichtern.

Gruß
Ollie


----------



## Liutasil (3. Februar 2008)

danke für die ausführliche Antwort.
Eigentlich suche ich nur nach einer Methode, bestimmte Daten zwischen 2 Flash-clienten auszutauschen. Das Ganze mit einem Socket-Server umzusetzten hat mir ein anderes Forum empfohlen.
Ich habe mich jetzt ein wenig über Webservices erkundigt, aber so ganz verstehe ich nicht, was das eigentlich ist.
Lässt sich über Webservices auch ein Netzwerk verwirklichen? Wenn ja, wie?


----------



## Oliver Gierke (3. Februar 2008)

Hm, was sagt den Wikipedia: http://de.wikipedia.org/wiki/Webservice. Ich denke, dir reicht der erste Absatz.

Webservices arbeiten natürlich grundsätzlich übers Netzwerk, allerdings auf einer ganz anderen Abstraktionsebene. Im Allgemeinen programmierst du keine Lowlevelinfrastruktur mehr (Sockets auf und zu, Protokoll etc.). Man setzt also auf ein vorhandenes Protokoll auf und nutzt z.B. XML als Transportformat der Daten. Deshalb dann auch der Container (Tomcat) der die Kommunikation über HTTP abnimmt und dir die Requests z.B. an ein Servlet routet. Das wäre dann der Einstiegspunkt in den Javaprogramm.

Die Kommunikationsart ist hierbei allerdings Request / Response. D.h. clients rufen aktiv vom Server Daten ab. Das liegt allerdings eher am verwendeten Protokoll (zum Großteil HTTP). Weiß nicht, ob das zu deinen Anforderungen passt.

Als "Socketersatz" dient dir bei einem Webservice dann z.B. ein Servlet, dass z.B. unter http://www.foo.de/bar ereichbar ist. Dies könnte dann auf POST Requests reagieren und mit XML im Response antworten. Das wäre dann ein WebService auf rudimentäre Art und Weise. An dem Servlet hängt dann sicher im Hintergrund etwas Logik, Datenbankzugriffe usw.

Gruß
Ollie


----------



## Liutasil (3. Februar 2008)

So wie ich das jetzt verstanden habe, kann bei einem Webservice der Server nicht aktiv Daten an den clienten senden. Dadurch wäre das für mein Programm weniger geeignet.
Das größte Problem bei der Arbeit mit Sockets ist doch eigentlich eine evtl. beim Nutzer installierte Firewall, die den verwendeten Port höchst wahrscheinlich nicht durchlässt.
Bei einem Browsergame kann man nicht erwarten, dass jeder einen Port bei seiner Firewall freigibt, um spielen zu können.
Lässt sich dieses Problem irgendwie lösen?
Gibt es z.B. eine Möglichkeit, eine Socket über Port 80 laufen zu lassen, um so die Probleme mit der Firewall zu umgehen?
Oder lässt die Firewall auch höhere Ports durch, wenn der Flash-Client vom selben Server aus gestartet wurde, von dem auch eingehende Daten kommen?


----------



## Oliver Gierke (3. Februar 2008)

Du schreibst doch aber selber "Flash Client". Wie soll der denn dann mit dem XML Sockets Modell Daten empfangen?

REINHAUN!


----------



## Liutasil (3. Februar 2008)

laut diesem Tutorial hier:klick
"steht mit dem XMLSocket-Objekt eine dauerhafte, beidseitige Verbindung zur Verfügung."
das heißt, der Server kann auch aktiv Daten an den Clienten senden, sobald eine Verbindung besteht.
oder habe ich da etwas falsch verstanden?


----------

