Android-P2P (direkt-Verbindung) über das Internet (hinter NAT)

Ich Fang mit einem kleinen Projekt, im Grunde ein multiplayer (wie in mehr als zwei Spielern) Variante des klassischen Schlachtschiff-Spiel.

Einem problem, welches ich versuche zu beheben, bevor ich Tauchen Sie ein in die Codierung ist das problem der Kommunikation zwischen den verschiedenen Spielern. Eine aktuelle Möglichkeit ist die Verwendung einer zentralen HTTP-server als zentrale Drehscheibe für die Kommunikation (gekoppelt mit der Android-C2DM-API zu erlauben, push-Kommunikation vom HTTP-server an den Geräten). Dies scheint eine schöne Lösung, weil in der Theorie, solange Sie Zugang zum Internet haben, sollte es funktionieren perfekt, ob Sie sich hinter einem NAT oder nicht.

Jedoch die vorgeschlagene Lösung hat den Nachteil, dass vorhandene single point of failure,/extra load (webserver). So möchte ich versuchen, andere Optionen. Ich dachte, die direkte verbindungen über Sockets zwischen dem Kunden (mit dem webserver nur als eine erste Sitzung Punkt), dies würde jedoch nur dann gut funktionieren, wenn alle Geräte wurden im gleichen Netzwerk. Wenn man bedenkt, dass wir heute fast immer hinter dem NAT-router, wie kann ich erreichen, direkte Kommunikation? Ich habe das Lesen über lochen, aber ich kann nicht finden, eine gute Bibliothek, die ist gut dokumentiert (mit guten Beispielen) und das funktioniert auf Android, sicher. Auch die meisten (wenn nicht alle) hole-punching-Techniken (STUN, ICE, etc...) weithin verfügbar nur mit UDP, und das ist gut für audio - /video-und Echtzeit-multiplayer Spiele, kann verlieren einige Nachrichten, aber für ein multiplayer-turn-basiertes Spiel, ist es wichtig, zu garantieren, die Lieferung der Daten von jeder Runde (etwas, dass es nicht möglich direkt mit UDP).

Also irgendwelche Ideen, wie man eine zuverlässige Loch Stanzen (vorzugsweise über TCP) zwischen Android Geräten hinter NAT? Es müssen keine arbeiten auf 100% der Fälle (ein fremder NATs, möglicherweise nicht unterstützt werden), aber es wäre schön, wenn es funktioniert auf den meisten Fällen.

InformationsquelleAutor der Frage petersaints | 2012-04-04

Schreibe einen Kommentar