2009-07-22 2 views
6

Ich mache ein Netzwerk-Spiel (1v1), wo im Spiel seine P2P - keine Notwendigkeit für einen Spieleserver.P2P-Netzwerk-Spiele/apps: Gute Wahl für einen "Battle.net" -ähnlichen Server

Damit die Spieler sich "finden" können, ohne dass sie sich in einem anderen Medium koordinieren müssen und IP-Adressen eingeben müssen (ähnlich den modernen Tagen von Netzwerkspielen), muss ich einen Koordinations-/Matching-Server haben .

Ich kann nicht normalen Web-Hosting verwenden, weil:

  • Die Clients in UDP kommunizieren.
  • Deshalb werde ich brauche UDP Lochen zu tun, der Lage sein, durch die NAT gehen
  • , dass der Server in UDP erfordern würde, sprechen und wissen, dass die Client-IP und Port
  • afaik mit regelmäßigen Web-Hosting (php/etc) Ich kann nur die IP-Adresse des Clients erhalten und kann nur in TCP (HTTP) kommunizieren.

Optionen Ich bin zur Berücksichtigung

  • Verwenden Sie eine Hosting-Lösung, wo mein Programm UDP-Verbindung annehmen kann. (Alle Empfehlungen?)

  • UDPonNAT scheint dies zu tun, sondern nutzt GTalk und verlangt von jedem Client eine GTalk-Konto für diese haben (was wahrscheinlich ist es eine ungeeignete Lösung)

Irgendwelche Ideen? Danke :)

Antwort

3

Zunächst möchte ich sagen, dass dies außerhalb meines Wissensbereichs liegt, aber ich war sehr interessiert, also habe ich ein wenig gesucht und gelesen.

Es scheint, dass die am häufigsten vorgeschriebene Lösung für UDP-NAT-Traversal die Verwendung eines STUN-Servers ist. Ich habe ein paar schnelle Suchen durchgeführt, um zu sehen, ob es Unternehmen gibt, die Ihnen einfach eine STUN-Hosting-Lösung anbieten, aber wenn es überhaupt welche gibt, wurden sie in Haufen von Anzeigen für einfaches Webhosting vergraben.

Glücklicherweise scheint es, dass es mehrere STUN-Server gibt, die bereits laufen und für die öffentliche Nutzung frei sind. Es gibt eine Liste der öffentlichen STUN-Server unter voip-info.org.

Darüber hinaus gibt es viel mehr Informationen zu haben, wenn Sie SO questions tagged "nat" erkunden.

+0

@Joel Wietelmann: Ich werde es versuchen. Ich werde dich wissen lassen, ob es klappt! Vielen Dank :) – yairchu

3

Ich sehe keine andere Wahl als einen dedizierten Server mit Ihrem Code zu haben. Die anderen Lösungen, die Sie vorschlagen, sind, sagen wir, weniger als optimal.

Wenn Sie klein anfangen, wird virtuelles Hosting in Ordnung sein. Die Kosten sind ziemlich minimal.

+0

Es gibt andere Möglichkeiten, aber alle von ihnen sind mehr Arbeit als es wert ist. Wenn es um Netcode geht, ist es am besten, die Dinge einfach zu halten. – Sneakyness

2

Anstatt ein ausgewachsener dedizierter Server, könnten Sie einfach einen günstigen Shared-Hosting-Service bekommen und die Anwendungsschnittstelle mit einer PHP-Seite haben, die wiederum mit einem MySQL-Datenbank-Backend verbunden ist.

Zum Beispiel hat Lunarpages ein Starterpaket $ 3/Monat, das 5 GB Speicherplatz und 50 GB Bandbreite enthält. Für etwas so einfaches, das ist alles was du brauchst.

Dann müssen Sie nur Ihre Anwendung die Webseite für die Liste der Spiele abfragen und eine POST-Anfrage senden, um ihr eigenes Spiel der Liste hinzuzufügen.

Natürlich erfordert diese Methode PHP und MySQL lernen, wenn Sie sie noch nicht kennen. Und wenn Sie es richtig machen, können Sie die PHP-Seite eine Art Endlosschleife eingeben lassen, um die Verbindung offen zu halten und nur Aktualisierungen an den Client zu senden, anstatt die Seite alle paar Sekunden abzurufen und viel Bandbreite zu verschwenden. Das ist jedoch außerhalb des Rahmens dieser Antwort.

Oh, und wenn Sie etwas absolut kostenloses suchen, suchen Sie nach einem kostenlosen PHP-Host. Das gibt es auch! Selbst bei einem werbefinanzierten Host kann Ihre App nur die Seite erfassen und die Anzeigen ignorieren, wenn Sie die Liste der Spiele analysieren. Ich weiß, dass T35 einer meiner Favoriten war, da ihr freier Plan Speicherplatz oder Bandbreite nicht verfolgt (es begrenzt die Größe pro Datei, um zu verhindern, dass ihr Dienst als Medienfreigabe verwendet wird, aber es sollte kein Problem sein für PHP-Dateien).Aber natürlich denke ich, dass es auf lange Sicht besser ist, mit einem bezahlten Gastgeber zu gehen.

Edit: T35 sagt auch, "Free Hosting ermöglicht 1 Domain gehostet werden, während bezahlt bietet unbegrenzte Domain-Hosting." Sie können also einfach nur für einen Domainnamen bezahlen und ihn mit ihnen verlinken! Ich denke, auf kurze Sicht ist das deine beste (günstigste) Wette. Natürlich geht das alles davon aus, dass Sie PHP entweder kennen oder dazu bereit sind, um dies zu ermöglichen. :)

+0

@Ricket: Danke für den Vorschlag.Ich habe jetzt herausgefunden, dass PHP-Hosting für mich nicht funktioniert, weil afaik es mir nicht erlauben wird, mit den Clients in UDP – yairchu

+1

Richtig zu kommunizieren. Ich bin gerade zurückgegangen und habe das Konzept der NAT-Traversierung neu durchdacht und dann realisiert, dass Sie ja UDP-Fähigkeiten benötigen. Um jedoch die Liste der Spiele und ähnliches zu verhandeln, sollten Sie TCP verwenden. Sie brauchen nur den Server, um die UDP-Pakete zu empfangen, um die ausgehenden Ports der Clients zu ermitteln, und dann können Sie ihnen über TCP eine Nachricht senden, die jeden ausgehenden UDP-Port des anderen angibt. Aber hoffentlich weißt du das alles schon. Wenn Sie eine Auffrischung benötigen, ist der Security Now Podcast eine großartige Ressource: http://www.grc.com/securitynow.htm#42 – Ricket

+0

Und nur zu Ihrer Information, PHP ist technisch in der Lage Socket-Übertragungen; aber es wäre in diesem Fall wegen der Natur von PHP und seiner 30-Sekunden-Ausführungsgrenze nicht nützlich. Sie können vielleicht Google App Engine in Betracht ziehen? Ich denke, Python wäre eine großartige Sprache, um dies zu schreiben, wie sehr ich es auch verachte. – Ricket

0

Eine Zwischenlösung zwischen dem Hosting Ihres eigenen dedizierten Servers und einer reinen P2P-Netzwerkumgebung ist das Gnutella-Modell. In diesem Modell gibt es Superperformer, die sich wie lokale Server verhalten, bekannte IP-Adressen besitzen und mit mehr Clients verbunden sind (und somit mehr Clients kennen) als ein typischer Peer. Dies erfordert immer noch, dass Sie mindestens einen Superpeer selbst ausführen, aber es gibt Ihnen die Möglichkeit, andere Leute ihre eigenen Superpere ausführen zu lassen.

+0

@Eric: Ich denke, in gnutella macht der Server viel mehr Arbeit (Suche nach freigegebenen Dateien usw.) und für mein Problem könnte dieses Modell übertrieben sein. – yairchu

+0

Sie haben Recht, dass es viel mehr Arbeit macht. Ich habe lediglich das Modell vorgeschlagen, bei dem P2P-Clients ein Netzwerk bilden, in dem sie mehr Peers kennen als nur diejenigen, mit denen sie direkt verbunden sind. Dies ist das Gnutella-Modell. – Eric

1

Es gibt nichts, was jede Netzwerkverbindung unterstützt. STUN ist wahrscheinlich gut, UPnP kann dafür arbeiten.

Es wird jedoch gemunkelt, dass die meisten Firewalls dazu verleitet werden können, fast alles über UDP Port 53 (DNS) zu passieren. Sie müssen sich möglicherweise mit dem Betriebssystem über Ihren Zugriff auf diesen Port streiten.

Überprüfen Sie auch SIP, es ist ein anderes Protokoll für diese Art von Dingen. Mit der Popularität von VOIP, kann es eine anständige eingebaute Unterstützung dafür in mehr Firewalls geben.

Wenn Sie sich wirklich für UDP engagieren, sollten Sie auch über HTTP strecken.

1

Wie wäre es, wenn Sie das Problem in zwei Teile zerlegen - machen Sie einen Spiel-Matcher-Client (der sich vom Spiel unterscheidet), der über http mit Ihrem billigen/geteilten Webhost kommunizieren kann. Alle Spieler, die die Spielabgleichfunktion verwenden möchten, verwenden dies. Der Spiel-Matcher-Client startet dann das eigentliche Spiel mit den richtigen Parametern (IP, usw.), nachdem er die Informationen von Ihrem Server erhalten hat.

Das Spiel wird dann den Standard Weg zu UDP Punch durch NAT, etc usw., wie pro Ihren Netzwerkcode. Das Spiel muss eigentlich nichts über den Matcher-Client oder Matcher-Server wissen - im wahren Sinne von P2P (wie Torrents, sobald Sie die IPs Ihres Peers erhalten, können Sie sogar vom Tracker trennen).

Auf diese Weise werden Ihre Probleme kleiner.

Verwandte Themen