Wie erstellt man ein einfaches 2-Spieler-Spiel, das über das Internet kommuniziert, ohne benutzerdefinierten Code auf einem Server?

StackOverflow https://stackoverflow.com/questions/2144287

  •  23-09-2019
  •  | 
  •  

Frage

Wie kann ich ein einfaches 2-Spieler-Spiel erstellen, das über das Internet kommuniziert?

Ich muss folgende Probleme lösen:

  • Suche oder Rendezvous – zwei Spieler wollen einander finden.

  • laufende Kommunikation.Jeder Spieler kann eine Aktion einleiten, die die Übermittlung von Informationen an die andere Seite in einem angemessen kurzen Zeitrahmen erfordert (Latenz vom Typ IM, nicht vom Typ E-Mail).

In dieser Hinsicht ist es meiner Meinung nach gleichbedeutend mit einem 2-Wege-Chat, bei dem die Leute einander finden und dann, wenn sie erst einmal zusammen sind, auch miteinander kommunizieren wollen.

Weitere Anforderungen:

  1. Gehen Sie vorerst davon aus, dass es sich bei den Endpunkten um Windows-Betriebssysteme handelt, die relativ neu sind.

  2. Gehen Sie davon aus, dass keiner der Endpoint-Rechner direkt über das Internet erreichbar ist.Gehen Sie davon aus, dass es sich um Client-Rechner handelt, die hinter Firewalls verborgen sind und eingehende Anfragen blockieren.Die Maschinen können ausgehende Anfragen stellen.(sagen wir über HTTP, aber TCP ist auch in Ordnung)

  3. Die Kommunikation sollte privat sein.Nehmen wir der Einfachheit halber an, dass bereits ein gemeinsames Geheimnis vorhanden ist und die Endpunkte AES ausführen können.Ich denke, was ich damit meine, ist, dass kein Vermittler die Nachrichtenpakete entschlüsseln muss.Die Entschlüsselung erfolgt nur an den Endpunkten.

  4. Der gesamte benutzerdefinierte Code sollte nur auf den Client-PCs ausgeführt werden.

  5. Angenommen, es gibt keinen Server im Internet, der unter meiner Kontrolle steht.

  6. Ich nutze gerne Server von Drittanbietern, um die Kommunikation untereinander zu erleichtern, etwa einen IM-Server oder ähnliches, solange dieser kostenlos ist und ich keinen benutzerdefinierten Code darauf installieren muss.


Welche APIs stehen zur Verfügung, um dieses Design zu erleichtern?

Kann ich dies mit IM-APIs tun?WCF?Gibt es WCF-Kanäle für Windows Messenger?

Welche Protokolle?HTTP?Ich habe das als „Peer-to-Peer“ getaggt, aber das meine ich auch so virtuell;Es gibt keine zwingende Anforderung für ein formelles P2P-Protokoll.

Welche Nachrichtenformate würden Sie verwenden?


BEARBEITEN

Um die Anforderungen rund um Server zu klären, möchte ich, dass KEIN SERVER UNTER MEINER KONTROLLE STEHT.Und KEINER MEINER BENUTZERDEFINIERTEN CODES AUF IRGENDEINEM SERVER.Das ist nicht dasselbe wie „Kein Server“.

Denk darüber so:Ich kann eine E-Mail über SMTP senden und dabei benutzerdefinierten Code verwenden, den ich auf der Sende- und Empfangsseite schreibe.Mein benutzerdefinierter Code kann über einen kostenlosen SMTP-Server-Vermittler eine Verbindung herstellen.Dies würde keine Installation von Code auf dem SMTP-Server erfordern.Das ist ungefähr das, was ich möchte, aber SMTP ist aufgrund der Latenz nicht akzeptabel.

BEARBEITEN2
Das habe ich auch gefunden: Bibliothek für Instant Messaging, wie libpurple, aber in C# geschrieben


ANTWORT

Ich kann tun, was ich will, indem ich Bibliotheken für IM-Frameworks verwende.Eine einfache Möglichkeit, dies mit Windows Live Messenger zu tun, ist die Verwendung von Messenger-Aktivitäts-SDK.Dies beweist das Konzept, ist aber keine wirklich allgemeine Lösung.Ähnliche Dinge können jedoch mit den IM-Bibliotheken für verschiedene Messenger-Systeme wie libpurple oder mit libs für IRC-Kanäle erreicht werden.In all diesen Fällen fungieren die IM-Server als Firewall-durchdringende Kommunikationsinfrastruktur.

War es hilfreich?

Lösung

libpurple zusammen mit otr Kann Ihnen die Privatsphäre geben, die eine solche Anwendung benötigen würde.

Andere Tipps

IM ist das falsche Werkzeug.Verwenden Sie stattdessen einen IRC-Chatroom.

Bei einem IRC-Chatraum „melden“ sich Ihre Kunden im Chatraum an, und dieser wird für Ihre „Präsenz“ genutzt.Jeder im Chatraum ist „verfügbar“, um das Spiel zu spielen.

Sobald dies erledigt ist, kommunizieren die Spielinstanzen über den Chatroom miteinander.Sie können den globalen Kanal oder einfach private IRC-Kanäle für den Spielverkehr nutzen.

Die zu lösenden Probleme:

  • Zunächst wird der gesamte Spielstatus auf den Clients geteilt.Viele Spiele haben dies getan (RTSs wie Age of Empires, RPGs wie Diablo).Client-Staaten sind jedoch anfällig für Hackerangriffe und Betrug.Das ist einfach die Wahrheit.Wenn das Spiel beliebt ist, WIRD es gehackt.

  • Ping-Verkehr.Der Ablauf besteht grundsätzlich darin, dass Sie sich in den Raum einloggen und Ihr Kunde sich im Modus „zum Spielen verfügbar“ befindet.Dann pingt es ALLE ANDEREN an, um zu sehen, ob SIE zum Spielen verfügbar sind.Dies geschieht, wenn sich jeder Kunde im Chatroom anmeldet.Anschließend können Sie den öffentlichen Raum für Übertragungsereignisse wie „Frank ist bereit für ein neues Spiel“, „Frank hat ein Spiel mit Joe begonnen“ usw. nutzen.Das kann dazu beitragen, dass die Spiele synchron bleiben und nicht geschwätzig werden, aber wenn sich ein Client mit dem Chatroom verbindet, sagt er: „Hallo zusammen, hier ist Bob, was macht ihr alle?“.Das müssen Sie also in den Griff bekommen.

  • Verkehrsaufkommen.IRC-Räume können viel Verkehr bewältigen, aber nicht viel Verkehr.Die meisten sind darauf ausgelegt, „Spamming“, „Flooding“ usw. zu verhindern.Es kann also durchaus sein, dass Ihr Spieltarif begrenzt ist.Für „Checkers“ kein Problem, schon gar nicht für „World of Warcraft“ während eines 40-Mann-Raids.Das ist ein Spieldesign-Problem.

  • Nutzungsbedingungen.Der IRC-Anbieter könnte durchaus sagen: „Äh nein, das können Sie mit unserem Service nicht machen.“Ich habe mich nicht damit befasst und weiß es daher nicht, aber es könnte ein Problem sein.

Ansonsten passt IRC ziemlich gut.Im Netz kursiert viel IRC-Bot-Code, ich habe noch nie etwas davon verwendet.

Jedes Zwei-Spieler-Spiel muss über eine Art Serverumgebung verfügen, indem sie zumindest zwischen zwei Clients/Spielern kommunizieren müssen. Beachten Sie, dass jeder der Clients/Spieler auch als eigener Server fungieren kann, um mit anderen verknüpften Clients zu kommunizieren. Die Notwendigkeit, alle Clients/Spieler zu einem bestimmten Zeitpunkt im Auge zu behalten, und die Notwendigkeit, die Suche nach anderen Kunden/Spielern zu erleichtern, erfordert jedoch eine Art Serverumgebung von Anfang an.

Sie können ein Message Board auf einem der kostenlosen Message Board -Server einrichten, damit sich die Spieler finden. Sie möchten sie wahrscheinlich dazu ermutigen, private Nachrichten zum Austausch von IP -Adressen zu verwenden. Verwenden Sie dann ein Protokoll, das mit IP -Adressen verbunden ist. Viel Glück damit. Firewalls machen es zu einem Schmerz.

Dann müsste natürlich eine Maschine des Paares als Server fungieren, der andere als Client. Ihre Software muss beide Codesätze enthalten. Ich habe ein solches Spiel geschrieben und kann Ihnen sagen, dass der Kommunikationscode ein wenig verwirrend wird.

Ich kann Ihnen jetzt sagen, dass Sie im Leben viel glücklicher wären, wenn Sie einen Webdienst geschrieben haben, um die Kommunikation zu erleichtern. Aber dann benötigen Sie einen Server dafür.

Viel Glück. Du wirst es brauchen.

Oder Sie können einfach ein Spiel für einen IM -Kunden wie Microsoft Messenger schreiben. Ich habe Spiele dafür gesehen, also weiß ich, dass es möglich ist.

Wie jemand gesagt hat, ist dies möglicherweise noch nicht möglich, wenn Sie keinen vermittelten Server zwischen 2 Spielern haben. Wenn Sie gerne Server von Drittanbietern verwenden, schlage ich vor, dass Sie Ihr System verwenden Google App Engine + XMPP über http. Es funktioniert gut über das Internet und hinter der Firewall. Und doch ist es kostenlos (solange Ihr System nicht aus GAE -Quoten herauswächst).

Peer to Peer ist aufgrund Ihrer Firewall -Einschränkung aus. Dies funktioniert sowieso nicht einfach für Verzeichnisdienste.

Die nächst einfachste Methode, die ich verwenden würde, besteht darin, ein sehr einfaches CGI -Server -Skript auf einer der zahlreichen super billigen Webhosting -Websites zu vergeben. Es scheint, dass Sie diesen Weg nicht gehen wollen. Gibt es einen bestimmten Grund? 100 Zeilen Code und ein super billiger Server sollten Ihnen alles geben, was Sie verlangen, und mehr.

Ich nehme an, Sie könnten sich in eine Art Chat -Bibliothekssache von Drittanbietern einbinden. Ich weiß nichts über die aktuellen IM -Protokolle, aber ein guter alter IRC und einen separaten Kanal für Ihr Spiel würde funktionieren. Sie könnten sogar etwas mit FTP zusammenschustern. Blog -Kommentare auf einer kostenlosen Blog -Site würden ebenfalls funktionieren. Die Frage ist warum?

Dies sind alles Kludges. Sie erledigen die Arbeit in obst, uneleganten und schlecht skalierenden Wegen.

Ich fordere Sie auf, die Webserverlösung zu überdenken.

Sie haben viele widersprüchliche Anforderungen. Beide Clients hinter einer Firewall, die eingehende Anfragen blockiert, bedeutet so ziemlich, dass sie Peer-2-Peer nicht ausführen können, da keiner der Maschine als Server fungieren kann, und Sie benötigen einen Transportserver in der Mitte, an dem jeder Client weitergeleitet wird. Derzeit ist das, was Sie fragen, so gut wie nicht möglich, da die Anforderungen an die NO -Server nicht möglich sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top