# Erstellen eines Online Multiplayer Apps



## Laikoos (3. Dez 2011)

Hallo liebe Community,
da ich jetzt nach langem rumprobieren immer noch keine Lösung für mein Problem
mit Kryonet gefunden habe wollte ich jetzt euch mal fragen, was es denn noch so für gute
Netzwerk-Lib gibt die gut geeignet sind für in meinem fall 2D Multiplayer Spiele.

Ich benutze für das Game selber Slick 2D.
Nur ich brauche dazu noch eine simple Netzwerk-Lib.

Wenn ihr einen Rat für mich habt postet ihn doch bitte 

Liebe Grüße Laikoos


----------



## irgendjemand (3. Dez 2011)

wenn es keine LIB gibt die deinen vorstellungen entspricht bau dir doch ganz einfach ne eigene

überleg dir welche daten du zwischen welchen parteien austauschen willst und wie man das realisieren könnte

wenn du z.b. eine dierekte client-to-client connection willst dann bau dir STUN nach *brauchst n server im netz der den verbindungs aufbau regelt*

du kannst natürlich auch alle daten über einen zentralen server laufen lassen ...

oder ... oder ... oder ...

es hängt davon ab WAS du WIE übertragen willst ...


----------



## Laikoos (4. Dez 2011)

Das wirkliche Problem ist das ich mich mit der Materie der ganzen Socket etc. Geschichte noch nicht wirklich auskenne.

Ich bin jetzt mal ein bisschen rumprobieren mit Apache Mina, sieht recht simpel und gut aus^^


----------



## irgendjemand (4. Dez 2011)

also wenn du keinen plan von streams und network-i/o hast ... dann solltest du dir das erstmal angucken bevor du eine komplexe net-app baust die dann plötzlich irgendwo fehler hat und du diese nicht lösen kannst da du nicht genau weis WAS genau schief läuft ...

in der JavaInsel gibt genug stoff zu diesem thema


----------



## Kr0e (4. Dez 2011)

Project Darkstar... Heißt jetzt glaub ich "RedDwarf". Ist ein Gameserversystem, darüber läuft auch Project Wonderland etc..

Ist ziemlich mächtig, falls dich das allerdings nicht abschreckt würde ich dir das wärmstens empfehlen.


----------



## Laikoos (5. Dez 2011)

Aber das ganze als Applet zu realisieren ist etwas schwieriger oder ?
Da ja Java Security alles Blockiert.. selbst wenn man Spieleressourcen laden will.
Geschweige denn die Objekte die zum Server gesendet werden sollen.


----------



## irgendjemand (5. Dez 2011)

hmm .. warum ?

ein applet darf doch resourcen laden ... und auch ganz legitim eine verbindung zu seinem home-server *also dem von dem es aus geladen wurde* aufbauen ...

verstehe grade deine probleme nicht ...

vllt postest du mal WAS GENAU nicht geht ... weil "geht nicht" ist keine fehlerbeschreibung


----------



## Kr0e (5. Dez 2011)

Ich meine sogar Applets dürften auch zu anderen Servern Verbindungen aufbauen, sofern die Applets "zertifiziert" sind. Und ich meine ohne dieses Zertifikat ist es selbst schwer eine Verbindung zum Homeserver auf einen anderen Port aufzumachen. Sprich Applets werden über HTTP geladen und wenn dann das Applet versucht ne Verbindung zum RedDwarf oder sonst-was-java-server aufzubauen (selbst wenn diese auf dem selben Server laufen aber logischerweise anderer Port) kann es zu Problemen kommen! Also wie gesagt kann sehr gut sein dass ich mich grad irre, aber so wars, als ich das letzte mal mit Applets gearbetiet habe...

Gruß,
Chris


----------



## irgendjemand (6. Dez 2011)

"applets dürfen verbindungen zu anderen servern aufbauen"

erstmal grundsätzlich : nein

nur wenn man ein applet signiert *zertifikat ist das teil womit die signierung legitimiert wird ... der eigentliche vorgang heißt aber signieren ... kommt von der dem applet verpassten signatur* wurde darf es verbindungen zu anderen servern aufbauen ... hat dann aber auch gleichzeitig vollen zugriff aufs system und damit auf die platten ...


"verbindung zu nicht-http dienst"

da ist deine aussage definitiv falsch

so lange du eine verbindung zum home-server aufbaust ist es völlig egal welches protokoll und welchen port du nutzt ... so lange es exakt der selbe server ist von dem es geladen wurde *über Context.getCodeBase oder so zu ermitteln* ...
ob ich dabei jetzt eine TCP-verbindung auf port 80 *http* aufbaue ... oder sonst eine kommunikationsart wähle ist dem securitymanager egal ... das einzige was ihn interessiert : verbindung zum home-server

natürlich sollte man gerade bei UDP vorsichtig sein .. aber bei TCP greift das auf jeden fall


----------



## Kr0e (6. Dez 2011)

Ok, wusste nicht, dass es kompletten Zugriff auf den HomeServer hat. Aber bei größeren Spielen reicht das meiner Ansicht nach immer noch nicht -> Clustering. 

ICh würde vermutlcih lieber zu WebStart greifen oder direkt Flash nehmen und mit deren Socket API die Netzwerkgeschichte implementieren, das harmoniert ohnehin besser mit Browsern und bietet seid Version 11 Hardware 3D. Außerdem ist es dann egal, ob die User eine JRE haben oder nicht.

-> Wähle die Technik, die zu deiner Aufgabe passt. Java ist kein Heilmittel für jede Art Aufgabe...

Gruß,
Chris


----------



## irgendjemand (6. Dez 2011)

WebStart ist aber auch nicht grad immer die beste lösung im vergleich zu Applets ...

WebStart ist ja lediglich eine technologie um applikationen über das java-browser-plugin zu laden und zu starten ... allerdings unterliegen auch WebStart apps ohne signierung und spezielle anpassungen im JNLP den selben sicherheitsbeschränkungen wie applets ... was ja eine der hauptpunkte ist ...

was das clustering angeht : kommt immer auf die verwendete load-balancing-technik an ... ob sich java mit dns-balancing austricksen lässt weis ich leider nicht ... müsste man ausprobieren ... aber soweit ich weis berprüft der SecurityManager wohl nur den code der ausgeführt wird ... nicht aber die umsetzung vom OS ...

ich mein ... wenn du z.b. Context.getCodeBase() *oder wie auch immer* verwendest bekommt man in der regel einen host-namen ...
was jetzt aber passiert wenn ein dns für http den dns-namen anderst auflöst als z.b. für ne game-verbindung weis ich nicht ... sollte aber java nicht weiter interessieren da java nicht so tief in den net-I/O-stack zugriff hat ...


----------

