2010-03-01 7 views
8

Ich habe hier eine Frage bezüglich der .Net Framework-Technologie und des Gaming-Servers. vermutlich habe ich ein paar Spielautomaten, die als Client fungieren, und ich möchte diese Client-Maschine mit einem Gaming-Server verbinden, meinst du, es ist gut, wenn ich die Server-Anwendung mit dem .NET-Framework entwickle?.NET Game Server

Die Client-Maschine ist auch in Dotnet-Technologie entwickelt. Was ist, wenn ich meinen Server auf einige gleichzeitig laufende Server ausweite, wenn ich das .Net-Framework auf meinem Spieleserver verwende? Was .Net-Technologie sollte ich verwenden, .Net Remoting, XML-Webdienste, COM +, MSMQ oder einen Vorschlag?

ein weiterer wichtiger Faktor hier ist die Leistung. Ich möchte, dass die Kommunikation zwischen dem Client und dem Server schnell und effizient ohne lange Verzögerung kommuniziert.

Der Zweck, den ich auf ein paar Server erweitern möchte, ist, weil wenn ich einen der Server heruntergefahren oder für Wartungsarbeiten heruntergefahren habe, kann ich meine Anwendung laufen lassen, ohne den Spielprozess zu unterbrechen, der missionskritisch und in Echtzeit ist.

Gibt es irgendeine Art von Seele da draußen solche Einstellungen vor? Wenn ja, was denkst du darüber? Am besten, gut, schlechter oder am schlechtesten, um das .Net im Spieleserver zu verwenden?

ich schätze hochachtungsvoll alle .Net und Spielentwicklerexperte, um einige Rückmeldung für mich hier zu geben.

Dank,

Antwort

1

Um für jede Art von Skalierbarkeit für ein Spiel-Server, müssen Sie UDP verwenden, für die Kommunikation (die .NET unterstützt, finden Sie UdpClient).

Dieser Artikel könnte Sie in die richtige Richtung: Multi-Threaded Game Server Browser

0

Ich glaube nicht, dass ich die Art von Domain-Wissen benötigt, um diese zu beantworten, aber ich will ihm trotzdem eine Chance geben, und vielleicht werde ich ein paar Fragen stellen, die die herauszukitzeln helfen richtige Antwort für dich.

Ist .Net der Weg zu gehen? Ich weiß es nicht. Kommunikation mit DirectX? - Pass, Entschuldigung.

Sind die Clients und der Server im selben LAN? Verbinden sie sich über das Internet? Für schiere Leistung würde ich ein .sum .Net Remoting. Bei Comms im Allgemeinen sollten Sie vielleicht den WCF berücksichtigen, da Sie die Art und Weise, wie Sie kommunizieren, durch eine Änderung in der Konfiguration ändern können (z. B. in Warteschlangen zu Webdiensten). Nachdem Sie das gesagt haben, müssen Sie vorsichtig sein, wie Sie die Endpunkte entwerfen, um so etwas wie Warteschlangen zu bekommen.

Sie sprechen über die Skalierung des Servers? Ich nehme an, Sie wollen eine Art Load Balancer mit mehreren Knoten darunter? Dies kann hilfreich sein: http://www.codeproject.com/KB/IP/remotingdesigndecisions.aspx

1

Ich bin nicht sicher, dass ein Standard-Net-Ansatz, wie Sie ...

Jeder .Net hinwollen sein wird Die Technologie, die Sie erwähnen, hat messbare Kosten für Setup und Teardown, und WCF gehört zu den schlimmsten von ihnen. Wenn die Leistung Ihr Ziel ist, müssen Sie direkt mit den Ports kommunizieren, anstatt einen standardisierten Wrapper zu verwenden. Ich würde sogar argumentieren, dass, wenn Leistung wirklich wichtig ist, Sie eine gerade C-Funktion statt einer .Net-Sprache betrachten müssen.(Einige werden sicherlich nicht mit mir übereinstimmen, aber ich habe festgestellt, dass dynamische Sprachen wie Ruby und Python auch ziemlich schnell sind)

Die andere Frage, die ins Spiel kommen wird, ist das Daten-Backend. Wenn alles im Speicher ist, bedeutet das Ausführen mehrerer Server, dass Sie einen Caching-Mechanismus wie memcached verwenden müssen, um Ihre Daten synchron zu halten. Wenn Sie eine Datenbank verwenden möchten, würde ich vorschlagen, mehrere Ports zu verwenden, einen, der mit Ihrer Datenbank verbunden ist, und einen anderen, der ausschließlich speicherbasiert ist. Der Vorteil, den Sie daraus ziehen, ist, dass Daten, die keine Datenbanken erfordern, auf einem Speicherplatz ausgeführt werden können, der so schnell ausgeführt wird, wie der Computer ausgeführt wird, und der Prozess muss nicht auf kostspielige Datenbankverbindungen warten.

WCF/.Net Remoting/COM +/etc sind alle ideal für Geschäftsanwendungen, wo eine 1-Sekunden-Turnaround Sie nicht töten wird, aber in einer Echtzeitumgebung, in der jede Millisekunde zählt, die Sie verwalten müssen der gesamte Kommunikationsstapel von dem Zeitpunkt an, zu dem Sie das erste Paket erhalten, bis Sie die Verbindung schließen. Jeder .Net-Kommunikationsstack, den ich in Echtzeitumgebungen verwendet habe, hat fast 100ms zu jeder Anfrage hinzugefügt. Indem ich den mittleren Mann ausschneide und direkt mit dem Kunden verhandle (dh den Stream direkt vom Port lesen und dann den Stream direkt an den Port senden), schneide ich diese Kosten ab und bekomme die Zeit zurück. Wenn Sie mit Zehntausenden von Anfragen pro Minute umgehen, wird diese Zeit sehr wichtig.

+0

Es ist nichts falsch mit einem "Standard-.Net-Ansatz" mit UDP-Sockets ... –

+0

Ich ging für die oberste Ebene Kommunikation Schichten und nicht die zugrunde liegenden System.Net-Klassen gehen. Ich habe nie versucht, direkt in .Net an einen Port zu binden, immer über UdpClient oder TcpListener. – thaBadDawg

+0

"Overhead" von WCF bei Verwendung der binären Datenübertragung über NetTcpBinding? Worauf beziehen Sie sich? –