Comment les serveurs de sites Web et les serveurs de jeux sont-ils connectés ensemble?
1. Il existe de nombreux types de jeux, jetons un coup d'œil à MMORPG en premier.
Peu importe à quel point le serveur RPG est simple, il est inévitable de gérer les interactions multi-personnes. Dans le même scénario, des centaines de personnes doivent recevoir des informations d'opération de tout le monde.
Deuxièmement, les opérations des utilisateurs sont très fréquentes et les serveurs généraux ont tendance à maintenir de longues connexions. De plus, ces liens interagissent fréquemment et n'ont pas de stratégies de partitionnement persistantes évidentes, ils restreignent donc la mise à l'échelle horizontale du serveur. Le même scénario ne peut souvent être exécuté que sur une seule machine physique.
Encore une fois, les jeux PC n'osent généralement pas mettre des opérations logiques sur le client. Les utilisateurs le font pour vous en quelques minutes, modifient les pièces d'or et brossent deux pièces d'équipement. Par conséquent, ce serveur MAP doit vérifier les opérations de tous les joueurs de la carte et calculer une série de logiques métier telles que Monster AI et le taux de chute.
Nous pouvons voir que les serveurs de jeux traditionnels sont évidemment différents des serveurs Web, avec des besoins commerciaux uniques tels que de longues connexions, des émissions multiples, une logique commerciale complexe et des stratégies de partitionnement restreintes.
2. Jetons un coup d'œil aux avantages de la concurrence avec le serveur de jeux.
La concurrence est en fait un processus logique du programme, et il ne nécessite pas de support physique multi-cœurs. La signification générale est de faire en sorte que plusieurs flux logiques indépendants ressemblent à leur fonctionnement en même temps. La concurrence au niveau du système d'exploitation est un modèle multi-thread à plusieurs processus. Laissez le système d'exploitation gérer les interruptions d'horloge, le blocage d'E / S et d'autres problèmes.
Pour le serveur, si la majeure partie de la tâche est dépensée pour les E / S, le mécanisme de concurrence peut empêcher l'ensemble du service de carte d'être bloqué par l'accès aux E / S. Lorsqu'une tâche est bloquée, allouez les ressources informatiques de rechange à d'autres tâches. Dans ce cas, la concurrence est bénéfique pour l'efficacité du fonctionnement du serveur et le temps de réponse.
Pour les programmeurs, un flux logique indépendant signifie qu'ils peuvent effectuer leurs tâches dans un contexte fiable, simple et lâche.
Parce que le commutateur logique entre les gestionnaires de systèmes d'exploitation doit être coincé à plusieurs reprises dans le noyau, certaines personnes pensent que c'est trop lent, donc ils font des threads dans l'espace utilisateur et contrôlent eux-mêmes plusieurs flux logiques dans le processus. En raison des limites des capacités de description du langage, il est trop difficile d'écrire et d'utiliser de telles choses sur C / C ++. Ainsi, le sucre de syntaxe de coroutine à Erlang, Go, Lua est généré.
Node.js contrôle essentiellement plusieurs flux logiques en soi, mais ce flux logique est distribué en fonction de l'état d'E / S et a la priorité. Dans la mise en œuvre réelle, il essaie autant que possible d'utiliser les E / S asynchrones non bloquantes. Lorsqu'une seule tâche appelle des E / S, je l'arrête et j'attends que le signal d'E / S soit envoyé, je le redémarre.
Notez ceci, chaque fois que j'exécute une tâche, et je ne passerai pas activement à d'autres flux de programme jusqu'à ce qu'il se termine ou qu'un appel d'E / S se produit. Donc, si cette tâche implique trop l'informatique, l'ensemble du processus de carte sera bloqué ici.
Et parce que Node.js est asynchrone, il est nécessaire d'écrire constamment des rappels pour écouter les signaux terminés par E / S. Le flux logique d'une seule tâche sera interrompu plusieurs fois. Lorsque la tâche devient assez complexe, le soi-disant Callbak Hell causera de grands problèmes pour le débogage et le développement.
3. En raison des raisons ci-dessus, je ne recommande pas d'utiliser Node.js dans le développement du serveur MMORPG non prototype.
4. Le serveur de jeux mobiles qui a émergé récemment convient tout à fait à Node.js, car les jeux mobiles sont limités aux problèmes de réseau , et le serveur ne peut vérifier que des données clés, et il n'est pas possible de gérer des situations où plusieurs personnes interagissent. Le côté serveur a tellement été simplifié qu'il n'est pas différent d'un serveur Web. La logique métier est également simple, traitement des données puis persistant.