[Cette page devrait à un moment donné être fusionnée avec la désynchronisation Client/Serveur ]
Un programme basé sur le réseau a généralement 2 côtés - serveur et client. Le client, comme son nom l'indique, est la partie du programme qui est traitée localement pour chaque utilisateur final, et le serveur est une chaîne de traitement principale qui s'exécute indépendamment des clients qui y sont connectés. Comme mentionné, les clients peuvent se connecter au serveur, envoyant et recevant à la fois des demandes et des informations en retour. Un serveur, sauf configuration contraire, n'a pas de limite au nombre de clients pouvant y être connectés à un moment donné, mais un client ne peut être connecté qu'à un seul serveur à la fois. Le principal goulot d'étranglement dans toute application réseau est la bande passante Internet, en d'autres termes, la quantité de données au fil du temps qui peuvent être envoyées depuis le serveur (également la quantité de données que les clients doivent envoyer au serveur, bien qu'il s'agisse d'un problème moins important) . Cela signifie qu'une telle application doit essayer de minimiser la quantité de communication entre le client et le serveur et n'envoyer que les données nécessaires (autrement impossibles à obtenir) entre les 2, telles que les entrées utilisateur, les événements à l'échelle du serveur, les autres activités des clients, etc.
Contenu
- Client 1
- 2 serveur
- Communication 3
- 3.1 paquets
CLIENT
Dans Minecraft, le client est votre jeu local exécuté sur votre machine et est en charge de tous les calculs locaux, tels que les graphiques, l'audio et l'interface utilisateur (interface utilisateur), ainsi que certains des calculs du serveur, car le client s'exécute une semi-copie locale du serveur, qui est là pour réduire l'utilisation de la bande passante. A partir de maintenant, nous appellerons cette semi-copie locale du serveur simplement "le client". Le client calcule certaines choses de la même manière que le serveur, avec de légères variations. Par exemple, le client n'a pas accès à la graine mondiale et ne peut donc pas traiter les aléas qui se produisent sur le serveur. Le client ne peut également gérer que ce qu'il a, donc d'autres choses que le serveur gère, comme les actions des autres joueurs, le chat, les commandes et d'autres choses, exclusives au serveur, ne peuvent pas être traitées par le client.
Serveur
Il existe une distinction concernant la définition du serveur dans Minecraft, selon que le jeu est local (solo) ou distant (multijoueur).
Si le jeu est exécuté localement, alors la version locale de la mention du serveur dans la section « Client » est toujours présente, mais une autre copie complète du serveur est également exécutée localement. C'est ce qu'on appelle un serveur intégré, car il est intégré à l'intérieur de votre client. Parce qu'un jeu local possède également 2 copies du serveur, l'une appelée "le serveur" (la version complète) et l'autre appelée "le client" (la semi-copie. Cette distinction est due au fait que le client ne communique toujours que avec la semi-copie, et la semi-copie et la copie complète communiquent toujours entre elles via un gestionnaire de réseau, bien que l'adresse soit localhost), même ce serveur local pourrait avoir des désynchronisations client/serveur.
Si toutefois le serveur est distant, le client ne dispose que d'une semi-copie du serveur, comme décrit dans la section "Client". Un serveur distant diffère d'un serveur intégré sur plusieurs points, à savoir les restrictions des joueurs sur les commandes et d'autres choses, mais aussi certaines structures de données uniques, telles que les listes de joueurs, les listes blanches, les listes noires, les listes d'autorisations, etc. Étant donné que ce serveur est exécuté sur une machine différente de votre jeu local ("client"), il utilise le réseau de routage, plus communément appelé Internet, pour transférer des données entre le serveur et le client, et vice versa. Internet n'est pas parfait et a un certain délai variable, ce qui fait que certaines choses fonctionnent moins couramment qu'en mode solo. De plus, Internet peut perdre la connexion de votre côté, du côté du serveur ou de tout autre élément intermédiaire, ce qui vous oblige à vous déconnecter d'un serveur à l'occasion.
Communication
Le serveur et le client sont tous deux séparés et chacun calcule les blocs et les entités séparément. Le client est en charge du rendu, du placement des joueurs et de quelques autres mécanismes. Cela signifie qu'il est possible de rendre des blocs qui ne sont pas réellement présents sur le serveur. Ce sont des blocs fantômes. Il est possible d'utiliser un bloc fantôme comme point d'ancrage pour le placement d'un autre bloc, permettant ainsi le placement de bloc dans les airs. Les paquets de dommages envoyés depuis le serveur contiennent un vecteur de direction de knockBack (même si aucun knockBack n'est appliqué, auquel cas ce sera le vecteur zéro), qui prend en considération tout ce que le serveur pense qui se passe avec le mouvement du joueur. Cela oblige le client à traiter le mouvement de la même manière que le serveur pour 1 gametick, resynchronisant efficacement entre les deux.
Voici un exemple d'utilisation d'entités pour pousser le client et de reconnexion de la connexion entre le client et le serveur https://www.youtube.com/watch?v=P7FM1JRbNWo
Voici un autre exemple d'Ă©lan vertical utilisant des blocs de slime fantĂ´me. Il y a aussi une explication incluse. https://www.youtube.com/watch?v=sFAlX7TKz1s
Paquets
Comme mentionné, le client et le serveur, qu'ils soient distants ou non, doivent communiquer entre eux. La méthode standard de communication client-serveur sur Internet (et aussi localement, pour certaines applications, comme Minecraft) est appelée "paquets". Un paquet est un petit paquet d'informations ou de données qui doit être transféré dans un sens entre les deux côtés. Une fois qu'un paquet est généré avec toutes les données qu'il doit contenir, il est envoyé à un gestionnaire de réseau, qui l'enveloppe ensuite d'en-têtes contenant des informations génériques importantes, telles que l'adresse IP d'origine, l'adresse IP de destination, l'heure de génération, etc. En cours de route, il est enveloppé par d'autres en-têtes générés par chaque machine ("routeur") par laquelle il est passé sur son chemin, afin qu'il puisse plus facilement retrouver son chemin, si une réponse est nécessaire. De l'autre côté, il est reçu et déballé de tous ses en-têtes, de sorte que seules les données brutes à l'intérieur sont exportées depuis le gestionnaire de réseau de ce côté et envoyées au processeur de paquets. Ensuite, le contenu du paquet est lu et des actions sont entreprises de manière appropriée, y compris les réponses renvoyées, si nécessaire.
Les paquets sont généralement de très petits paquets d'informations, ne contenant généralement pas plus de plusieurs centaines d'octets. Leurs informations sont compressées et minimisées, puis extrapolées de l'autre côté en données réelles. Pour cette raison, les deux parties doivent avoir un contrat entre elles sur l'apparence exacte des données. Vous pouvez en savoir plus sur les paquets en ligne. Ce que nous pouvons apprendre sur le comportement de Minecraft à partir de son utilisation des paquets, c'est que (particulièrement ressenti lorsque Internet est lent ou déconnecté) souvent, les données transférées entre le client et le serveur sont perdues, retardées différemment ou modifiées, en raison des défauts de Internet, s'appliquant différemment à chaque petit paquet d'informations, provoquant une certaine fluctuation dans le flux de données transféré entre le client et le serveur (et vice versa).