Welche Netzwerk-Engine / Bibliothek / welches System soll in einem rundenbasierten .NET-Spiel verwendet werden? [geschlossen]


7

Ich entwickle ein rundenbasiertes Spiel mit abstrakter Strategie in C #.

Eine hohe Netzwerklast ist daher nicht zu erwarten. Die Spieler müssen nicht immer verbunden sein. Der Host könnte warten, bis der aktuelle Spieler eine Verbindung hergestellt und seinen Zug ausgeführt hat. Ich weiß, dass ich eine Website erstellen könnte, um das auszuführen, aber ich möchte, dass jeder seine eigenen Spiele hosten kann.

Ich brauche etwas Zuverlässiges und das ermöglicht mir eine gute Produktivität.

Ich bin schon mit WCF unterwegs . War das eine gute Wahl? Welches andere Netzwerk-Framework sollte ich berücksichtigen?


1
WCF unterstützt Duplexverbindungen (nachdem die Verbindung geöffnet wurde, können entweder der Client oder der Server Nachrichten aneinander senden). Es kann auch verschiedene Protokolle (TCP + HTTP) gleichzeitig ohne zusätzlichen Aufwand verarbeiten.
Jpbochi

Antworten:


2

Ich habe WCF für mein eigenes rundenbasiertes Strategiespiel verwendet und es hat sehr gut funktioniert. Der Bereich für dauerhafte Sitzungen ist großartig, und Duplexkanäle mit Client-Rückrufen sind ideal, um Nachrichten vom Server nach Belieben an den Client zu senden. WCF unterstützt auch mehrere Endpunktbindungen, sodass Sie den lokalen Player über eine Named-Pipe-Bindung verbinden können, während Remote-Player über TCP-Bindungen eine Verbindung herstellen.

Ich empfehle TCP-Bindungen mit binärer Formatierung, wenn Sie in jeder Runde viele Daten senden.


3

Wenn Sie sich in WCF wohl und produktiv fühlen, gibt es möglicherweise keinen starken Grund, etwas anderes zu verwenden. Ich denke sicherlich, dass WCF ein guter Ausgangspunkt ist, denn wenn Sie dem Vertragsmuster folgen, ist es ein einfaches Muster, um es auf die Arbeit mit anderen Systemen umzustellen, falls dies erforderlich sein sollte.

Für eines meiner eigenen Projekte habe ich mit einem WCF-Prototyp begonnen. Als ich in die "letzte Meile" einstieg, stellte ich fest, dass ich meistens gegen WCF kämpfte, um Dinge zu erledigen. Ich hatte insbesondere Probleme mit dem Matchmaking von Spielen im Peer-to-Peer-Stack von WCF, was mir nicht die Tools gab, die ich brauchte. In diesem Projekt wechselte ich schließlich zur XNA-Netzwerkbibliothek, die mir das Xbox-ähnliche Matchmaking (und GamerTags und so weiter) gab, das ich suchte und (schlecht) versuchte, in WCF zu emulieren. (Natürlich geht die Netzwerkbibliothek von XNA davon aus, dass Sie in einem XNA-Spiel arbeiten, und unterstützt die Veröffentlichung des Spiels unter Windows ohne GfW Live-Vertrag leider immer noch nicht.)

Ich habe beim Wechsel von WCF zu XNA Net nicht so viel von meinem Netzwerkcode berührt, weil sich die Verträge selbst (die Schnittstellenklassen) nicht allzu sehr geändert haben (außer das Löschen der WCF-Attribute). Das Schreiben von Reader / Writer-Klassen, die meine Verträge implementiert oder verbraucht haben, war ziemlich einfach. Ich hätte wahrscheinlich die Unterstützung für beide mit ein wenig #if WINDOWSMangeln behalten können , aber ich hatte beschlossen, die WCF-Unterstützung zu diesem Zeitpunkt einfach einzustellen, weil dies die Dinge in diesem Projekt vereinfachte. Vielleicht interessant, um andere Projekte direkt mit XNA Networking zu starten, habe ich immer noch etwas von WCFs schnittstellen- / proxygesteuertem "Vertrags" -Muster verwendet. Ich wollte eigentlich einen Blog-Beitrag zu diesem Thema schreiben, weil ich denke, dass es ein gutes Muster ist, dem man folgen sollte.


1

Wenn Sie einfach "Turn" -Änderungen hin und her passieren, sind Sie auf dem besten Weg. WCF bietet Ihnen die größtmögliche Flexibilität, ohne Ihre Entwicklungsanstrengungen erheblich zu erweitern, insbesondere wenn Sie .NET bereits kennen.

Da es den Anschein hat, dass Latenz kein Problem in Ihrem Spiel ist, ist WCF eine gute Wahl, da es die gesamte Nachrichtenkodierung von Ihnen abstrahiert und Sie diese Abstraktion nicht bis zum letzten Stück Leistung herausholen müssen sollte für Sie nützlicher als schädlich sein.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.