Wie sind Websiteserver und Spielserver miteinander verbunden?
1. Es gibt viele Arten von Spielen, schauen wir uns zuerst MMORPG an.
Unabhängig davon, wie einfach der RPG-Server ist, es ist unvermeidlich, mit mehrköpfigen Interaktionen umzugehen. Im selben Szenario müssen Hunderte von Personen Betriebsinformationen von allen anderen erhalten.
Zweitens sind die Betriebsvorgänge der Benutzer sehr häufig, und allgemeine Server haben tendenziell lange Verbindungen. Darüber hinaus interagieren diese Links häufig und haben keine offensichtlichen anhaltenden Partitionierungsstrategien, sodass sie die horizontale Skalierung des Servers einschränken. Das gleiche Szenario kann oft nur auf einer physischen Maschine ausgeführt werden.
Auch hier wagen PC -Spiele normalerweise keine Logikvorgänge auf den Kunden. Benutzer knacken es in Minuten für Sie, wechseln Goldmünzen und bürsten zwei Gerätestücke. Daher muss dieser Kartenserver die Vorgänge aller Spieler auf der Karte überprüfen und eine Reihe von Geschäftslogik wie Monster AI und Drop -Rate berechnen.
Wir können sehen, dass sich traditionelle Spielserver offensichtlich von Webservern unterscheiden, mit einzigartigen Geschäftsanforderungen wie langen Verbindungen, mehreren Sendungen, komplexen Geschäftslogik und eingeschränkten Partitionierungsstrategien.
2. Schauen wir uns die Vorteile der Parallelität für den Spielserver an.
Parallelität ist eigentlich ein logischer Programmprozess und erfordert keine multikore-physische Unterstützung. Die allgemeine Bedeutung besteht darin, mehrere unabhängige Logikströme so aussehen zu lassen, als würden sie gleichzeitig ausgeführt. Die Parallelität auf Betriebssystemebene ist ein Mehrprozess-Multi-Thread-Modell. Lassen Sie das Betriebssystem Taktinterrudeln, E/A -Blockierungen und andere Probleme behandeln.
Wenn der Server für den größten Teil der Aufgabe für E/A ausgegeben wird, kann der Parallelitätsmechanismus verhindern, dass der gesamte Kartendienst durch E/A -Zugriff blockiert wird. Wenn eine Aufgabe blockiert ist, zuordnen Sie die Ersatzcomputerressourcen anderen Aufgaben zu. In diesem Fall ist die Parallelität für die Effizienz und die Reaktionszeit des Serverbetriebs von Vorteil.
Für Programmierer bedeutet unabhängiger logischer Fluss, dass sie ihre Aufgaben in einem zuverlässigen, einfachen, locker gekoppelten Kontext erledigen können.
Da der Logikschalter zwischen OS -Handlern wiederholt im Kernel stecken muss, denken einige Leute, dass dies zu langsam ist, sodass sie einige Threads im Benutzerbereich durchführen und dabei mehrere logische Strömungen selbst steuern. Aufgrund der Einschränkungen der Funktionen der Sprachbeschreibung ist es zu problematisch, solche Dinge auf C/C ++ zu schreiben und zu verwenden. So wird der Coroutine -Syntaxzucker in Erlang, Go, Lua erzeugt.
Node.js steuert im Wesentlichen mehrere logische Streams von sich aus, aber dieser logische Strom wird basierend auf dem E/A -Zustand verteilt und hat Priorität. In der tatsächlichen Implementierung versucht es, nicht blockierende asynchrone E/A-I/A-Verwendung zu verwenden. Wenn eine einzelne Aufgabe I/O aufruft, stoppe ich sie und warte, bis das Signal von I/A gesendet wird, starte ich es neu.
Beachten Sie dies, jedes Mal, wenn ich eine Aufgabe ausführe, und ich werde nicht aktiv zu anderen Programmströmen wechseln, bis sie abgeschlossen ist oder ein E/A -Anruf auftritt. Wenn diese Aufgabe also zu viel Computer beinhaltet, wird der gesamte Kartenvorgang hier blockiert.
Und weil Node.js asynchron ist, ist es notwendig, ständig Rückrufe zu schreiben, um auf Signale zuzuhören, die von der I/A abgeschlossen wurden. Der logische Fluss einer einzelnen Aufgabe wird mehrmals unterbrochen. Wenn die Aufgabe recht komplex wird, wird die sogenannte Callbak-Hölle große Probleme beim Debuggen und der Entwicklung verursachen.
3. Aus den oben genannten Gründen empfehle ich nicht, node.js in nicht protzotypen MMORPG-Serverentwicklung zu verwenden.
4. Der kürzlich entstandene Handyspielserver ist für node.js durchaus geeignet, da mobile Spiele auf Netzwerkprobleme beschränkt sind und der Server nur Schlüsseldaten überprüfen kann, und es ist nicht möglich, Situationen zu bewältigen, in denen mehrere Personen interagieren. Die Serverseite wurde so stark vereinfacht, dass sie sich nicht von einem Webserver unterscheidet. Die Geschäftslogik ist auch einfach, verarbeitet Daten und bestehen anschließend.