Rapport d’outil RakNet








télécharger 48.05 Kb.
titreRapport d’outil RakNet
date de publication22.03.2018
taille48.05 Kb.
typeRapport
ar.21-bal.com > comptabilité > Rapport
Rapport d’outil RakNet

Travail présenté à : Vincent Échelard

Date : jeudi le 8 mai 2008

Par : guillaume St-Amour

Table des matières



Table des matières
2

Introduction 4

Introduction aux jeux multi-joueurs 4

Un seul système : 4

Jeux en réseau : 5

Jeux MMO : 5

Modèles d’architecture réseau pour jeux vidéo 6

Peer-to-peer (P2P): 6

Client-serveur : 7

Présentation des intergiciels (« middleware ») 7

DirectPlay  7

Quazal Net-Z  8

ReplicaNet  8

RakNet 8

Introduction à RakNet 8

Revue des Fonctionnalités 8

Installation 9

Intégration a un projet Visual Studio 10

Tutoriels de communication RakNet 12

Code Source 13

NetworkCommunicator 13

Conclusion 14


Introduction


Le but de ce rapport est de présenter la bibliothèque réseau RakNet et d’en faire une évaluation. Nous verrons premièrement les bases d’un jeu multi-joueurs et quelques modèles logiciels d’architecture réseau. Il est important d’avoir une idée de ce que nous devons concevoir avant de choisir un intergiciel. Nous espérons du même coup vous aider à décider de l’architecture à utiliser dans votre jeu. Nous présenterons aussi un aperçu de quelques bibliothèques réseau disponibles.

Puisque RakNet est le sujet principal de ce rapport, le reste du document se consacrera à l’exposition de ses fonctionnalités, à son installation et intégration à un projet Visual Studio, à des tutoriels et à son évaluation. L’évaluation portera sur les fonctionnalités utilisées au cours du développement de notre projet « La Substance ».

Introduction aux jeux multi-joueurs


Un jeu multi-joueurs est un jeu joué par plusieurs joueurs. Il existe plusieurs types de jeux multi-joueurs.

Un seul système :


Certains se jouent sur le même ordinateur ou console avec plusieurs contrôleurs. Ces jeux ne demandent pas de connectivité réseau et sont très souvent limités de 2 à 4 joueurs. Pour ces jeux, aucun intergiciel n’est nécessaire.


Streets of Rage - Sega

Jeux en réseau :


Aujourd’hui, on ne se contente plus de jouer à 2 ou 3 sur un même écran. On veut donner compétition à nos amis ainsi qu’à des inconnus tout en restant chacun chez soi. La plupart des jeux modernes offrent une connectivité multi-joueurs par réseau. Ces jeux nous proposent de jouer des parties de 4, 8, 16, 32 ou même parfois plus de joueurs. Battlefield 2 de Digital Illusions permet à 64 joueurs de s’affronter sur un champ de bataille. Il est possible de réaliser ce genre de jeu grâce à des bibliothèques réseau tel que RakNet.


Battlefield 2 – Digital Illusions CE

Jeux MMO :


Depuis quelques années, un autre type de jeu multi-joueurs à fait son entrée : les jeux en ligne massivement multi-joueurs (« massively multiplayer online games », MMOG ou tout simplement MMO). Les MMO permettent à plus de 1000 personnes de jouer ensemble sur un serveur privé. Ces types de jeux sont largement plus complexes que les deux autres mentionnés plus haut. Ils demandent énormément de ressources et une architecture réseau avancée. Les intergiciels pour ce type de jeux sont nombreux et diversifiés.


Ultima Online – Origin Systems, Electronic Arts

Modèles d’architecture réseau pour jeux vidéo


Les modèles présentés dans cette section couvrent le type de jeu « réseau » présenté dans la section précédente.

Peer-to-peer (P2P):




Dans une architecture P2P, les clients se voient tous entre eux. Chaque client est connecté à tous les autres. Lorsqu’un client envoie un message, il l’envoie à toutes ses connexions. Il n’y a pas de serveur. RakNet peut fonctionner avec cette architecture.

Dans le modèle P2P asynchrone, chaque client doit informer tous les autres de ses propres changements et évènements en envoyant des messages. Un exemple typique de message est « le joueur Y perd 10 points de vie ». Beaucoup de jeux tels que Diablo on été développés avec modèle. Le désavantage de cette architecture est qu’elle permet aux joueurs de tricher. Essentiellement, un joueur peut envoyer de faux messages qui seront acceptés sans vérification. Par exemple, dans Diablo un joueur peut envoyer un message « le joueur Y perd 65,535 points de vie » même si le joueur se trouve hors d’atteinte. Dans le modèle d’architecture de Diablo, les autre joueurs acceptent le message sans aucune vérification et enlèvent les points de vie au joueur.

Un modèle d’architecture P2P plus évolué est le P2P synchrone. Le jeu StarCraft par Blizzard utilise ce modèle. Dans ce modèle, on effectue des vérifications. Au lieu d’envoyer un message du type « le joueur Y perd 10 points de vie » on envoie les entrées du jeu du type « le joueur X clique avec le bouton droit ». Chaque joueur effectue alors des vérifications sur ce qui devrait se produire dans le jeu selon la position du joueur et l’endroit ou il a cliqué. Les programmeurs s’assurent de n’inclure aucun message réseau qui permettrait à un joueur de tricher.

Avec le P2P synchrone, la synchronisation est importante. Si deux ordinateurs font une opération différente, les applications divergent et risquent à la longue de donner des résultats complément différents. Les joueurs doivent commencer le jeu au même moment et dans les mêmes conditions sur chaque machine. Les clients doivent s’échanger continuellement les messages des entrées. Dans ce modèle, il y a plus de temps d’attente (« lag ») puisque le jeu se met en pose chaque fois qu’un joueur ne peut communiquer. Le jeu se pose et attend le rétablissement de la communication. Pour cette raison, les jeux d’action évitent ce modèle réseau.

Bien que le modèle P2P synchrone enlève la possibilité aux joueurs de contourner les règles du jeu, il existe d’autres façons de tricher. Par exemple, les joueurs de StarCraft connaissent bien MapHack. Puisqu’on connait exactement ce qu’un joueur fait pendant la partie (on reçoit chaque entrée des joueurs), des tricheurs ont programmé un logiciel permettant de visualiser tout ce qu’un joueur fait révélant essentiellement toute la carte du jeu.

Un autre problème de l’architecture P2P est que les clients connaissent l’adresse IP de tous les autres joueurs. Un joueur malicieux peut utiliser cette information pour « hacker » un autre joueur.

Client-serveur :




Le modèle client-serveur centralise les données et les opérations. Chaque client a maintenant une seule connexion (vers le serveur). C’est le serveur qui reçoit les entrées (clavier et souris) des clients et qui décide de tout ce qui se produit dans le jeu. Les clients reçoivent du serveur les informations servant à l’affichage seulement.

Ce modèle est beaucoup plus sécuritaire que le modèle P2P. Il règle tous les problèmes discutés dans l’architecture P2P. Tricher est maintenant beaucoup plus difficile, le temps d’attente est moins long et ne connait pas tout ce que les joueurs font.

Par contre, tricher reste possible du côté serveur. C’est pourquoi les serveurs dédiés (sans joueur) sont populaires.

Beaucoup de jeux aujourd’hui sont conçus avec ce modèle. Les jeux tels que Half-Life, Diablo 2, Battlefield, Quake et les MMO tels qu’EverQuest et World of Warcraft sont basés sur cette architecture.

Présentation des intergiciels (« middleware »)


Il existe plusieurs bibliothèques permettant d’implémenter un jeu en ligne. En voici quelques unes :

DirectPlay 


Fait partie de l’API DirectX de Microsoft. Cette bibliothèque a été conçue pour les jeux vidéo sous Windows. Par contre, depuis la version 9.0 de DirectX, DirectPlay a été rendu obsolète. Sous Windows Vista, les DLL de DirectPlay sont conservés à fins de compatibilité seulement.

Quazal Net-Z 


La compagnie montréalaise Quazal semble être un choix populaire auprès des compagnies de jeux. Ubisoft, Atari, JoWood Productions, Capcom, Eidos et Midway auraient tous acheté cette bibliothèque selon le site de Quazal. Malheureusement, la bibliothèque Net-Z n’est pas gratuite. Il existe toutefois des versions à moindre coût pour les écoles.

Voici la liste des jeux développés avec Net-Z :
http://www.quazal.com/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=121&page=1

ReplicaNet 


ReplicaNet semble être une bibliothèque gratuite bien documentée. Toutefois à première vue, la bibliothèque semble plus complexe à utiliser que RakNet. J’ai appris l’existence de ce produit seulement à la fin de notre projet.

Site : http://www.replicanet.com/

RakNet


Site : http://www.jenkinssoftware.com/

Introduction à RakNet


RakNet est une bibliothèque C++ réseau, gratuite pour les développeurs indépendants, conçue spécialement pour les applications demandant un temps de réponse critique. Pour cette raison, la bibliothèque repose entièrement sur le protocole UDP. Elle a été conçue spécialement pour les jeux vidéo mais est indépendante de toute application.

Selon Jenkins Software, la bibliothèque a été conçue pour être rapide, facile à utiliser et indépendante de l’application et de la plate-forme. Elle offre une panoplie de fonctionnalités réseau.

Revue des Fonctionnalités


RakNet couvre toutes les fonctionnalités requises pour concevoir un jeu multi-joueurs. Dans le cadre de notre projet, nous n’avons pas utilisé toutes ses capacités. Par contre, il a été très facile de dénicher ce que nous avions besoin pour commencer à transmettre des messages entre les applications. Le manuel de RakNet sur le site de Jenkins Software a été particulièrement efficace à nous mettre sur la bonne piste.

Voici un résumé des fonctionnalités couvertes par RakNet :

  • Un système de lobby basé sur la base de données PostgreSQL. Ceci permet d’enregistrer des données de façon persistent et de faire du matchmaking. Grâce au lobby on peut créer des pièces, faire des listes d’amis, envoyer des emails et établir des rangs.

  • Réplication automatique des objets. Cette fonctionnalité permet de créer des objets réseau. Ces objets sont créés sur un ordinateur et répliqué sur les autres. La sérialisation et le transfert des objets se fait automatiquement.

  • Remote procedure calls. RakNet supporte les RPC. Les RPC sont une technique qui permet d’invoquer des fonctions à distance et même d’attendre une valeur de retour.

  • Communication (voir RakPeer.h). RakNet permet bien sûr de simplement envoyer des messages. RakNet nous permet de spécifier l’ordonnance et la fiabilité des paquets. RakNet offre aussi une méthode Bitstream qui permet d’écrire des bits sur le flux. RakNet gère complètement l’envoi et la réception des données dans des « threads » cachés. Le client n’a pas à se soucier comment reconstruire les paquets à la réception ni comment diviser les paquets pour l’envoi.

  • Communication vocale. RakNet offre un système pour communiquer vocalement avec les autres joueurs. L’encodage et la transmission sont gérés par RakNet. Toutefois, RakNet n’offre pas de moyen d’enregistrer ni de faire jouer la voix.

  • RakNet possède beaucoup d’autres fonctionnalités moins importantes tels que la compression de données, les statistiques, le débogage, la simulation de réseau, le transfert de fichiers et des connexions sécuritaires. Nous n’avons pas eu le temps de voir toutes ces fonctionnalités mais cela nous montre que RakNet est un outil assez complet.

Pour notre projet « La Substance » nous avons seulement utilisé la fonctionnalité communication de RakNet. Nous avons décidé qu’envoyer des messages était simple, efficace et répondait à tous nos besoins. Cependant, nous réalisons aujourd’hui que la réplication automatique des objets auraient sûrement été très utile pour notre projet. Nous conseillons à tous de regarder cette option.

Notre projet a grandement bénéficié du module de communication RakNet. Il nous a permis d’établir une connexion client-serveur très facilement. Nous n’avons pas eu à nous soucier des détails des connexions. L’engin gère cet aspect à l’arrière plan. RakNet nous averti quand quelqu’un se connecte et quand une connexion est perdue. Nous avons seulement à nous occuper de ce qui arrive dans le jeu lorsque ces évènements se produisent.

Au lieu de nous attarder sur l’implémentation technique TCP/IP par socket d’une architecture client-serveur, RakNet nous a permis d’avancer plus rapidement vers l’envoi de messages. Ainsi, il n’a fallu que très peu de temps avant que nous puissions nous échanger des messages textes. Nous avions très vite une salle de bavardage.

Pour réaliser notre module réseau au complet nous n’avons pas eu besoin de fils d’exécution supplémentaires. RakNet s’occupe du synchronisme. Tout ce que le client doit faire c’est s’assurer de lire les paquets entrants à chaque boucle du jeu. RakNet les garde dans une liste jusqu’à ce qu’ils soient reçu par le client. L’ordonnance et la fiabilité est assurée par RakNet. Aucune vérification n’est nécessaire de la part du client.

Installation


Voici un petit guide pour vous aider à installer RakNet.

  1. Allez chercher le fichier zip sur le site http://www.jenkinssoftware.com/

  2. Dézippez le contenu quelque part sur le disque

  3. Ouvrez RakNet.sln et compilez le projet en mode release et en mode debug. Les DLL seront créées dans le répertoire \Lib\

Aucun autre logiciel, DLL ou outil est nécessaire pour faire fonctionner RakNet. L’engin est indépendant.

Intégration a un projet Visual Studio


Le site de Jenkins Software possède un tutoriel pouvant vous aider à configurer votre projet Visual Studio. Toutefois, nous trouvons que ce tutoriel n’est pas très clair. La solution proposée ne se porte pas bien aux projets d’équipe partagés avec des outils comme TortoiseSVN. Nous voulons éviter que différentes personnes de l’équipe installent RakNet à des endroits différents ou utilisent des versions différentes de RakNet. C’est pourquoi nous intégrons complètement RakNet à notre projet. Par contre, si vous voulez débugger le code de RakNet nous vous conseillons la deuxième forme d’intégration proposée dans le tutoriel (intégration du code source). Nous vous offrons ce petit guide pour vous aider à configurer votre environnement de travail avec RakNet.

  1. Assurez-vous d’avoir bien compilé le projet RakNet en mode release et en mode debug.

  2. Les DLL RakNet se trouvent dans le répertoire \Lib\ de votre installation RakNet. Copiez RakNetDebug.dll dans le répertoire debug de votre jeu. Copiez RakNet.dll dans le répertoire release de votre jeu. Les DLL doivent se trouver au même niveau que votre exécutable.



  3. Créez un répertoire \lib\ au même niveau que votre projet (fichier .vcproj). Copiez-y les fichiers RakNetDLL.lib et RakNetDLLDebug.lib.



  4. Créez un répertoire nommé RakNet au même niveau que votre code source. Ajoutez-y tous les fichiers header (.h) qui se trouvent dans le répertoire \Source\ de votre installation RakNet.

  5. Dans les propriétés de votre projet, sous Linker -> Additional dependencies, ajoutez le répertoire .\lib





  6. Dans les propriétés de votre projet, en mode debug, sous Linker -> Input, ajoutez ws2_32.lib et RakNetDLLDebug.lib (ou RakNetDLL.lib en mode release).



  7. Vous êtes maintenant prêt à utiliser RakNet dans votre projet. Incluez les headers voulu sous la forme suivante : #include "RakNet\RakPeerInterface.h"

Tutoriels de communication RakNet


Plusieurs tutoriels sont disponibles sur le site de RakNet : http://www.jenkinssoftware.com/RakNet/manual/index.html

Tutoriel sur l’établissement d’une connexion : http://www.jenkinssoftware.com/RakNet/manual/connecting.html

Tutoriel sur l’envoi de paquet : http://www.jenkinssoftware.com/RakNet/manual/sendingpackets.html

Code Source


J’inclus dans ce rapport du code source de base permettant d’établir des connexions et d’échanger des messages très rapidement.

NetworkCommunicator




#ifndef NETWORK_COMMUNICATOR_H

#define NETWORK_COMMUNICATOR_H
#include "RakNet\RakNetworkFactory.h"

#include "RakNet\RakPeerInterface.h"

#include "RakNet\MessageIdentifiers.h"
class NetworkCommunicator

{

protected:

static const unsigned short MAX_CLIENTS = 10;

static const unsigned short SERVER_PORT = 8888;

RakPeerInterface *peer;
public:

virtual void send(const char*, const int size, SystemAddress address, bool isBroadcast)=0;

virtual Packet* receive()=0;a

void deallocatePacket(Packet*packet)

{

peer->DeallocatePacket(packet);

}

virtual bool start()=0;

virtual void stop()=0;

};
#endif NETWORK_COMMUNICATOR_H

Cette interface permet de communiquer avec RakNet. L’implémentation est différente pour un serveur et un client.

Voici les implémentations de cette interface.



Pour communiquer, il suffit de créer un NetworkServer et appeler la fonction start(). Même chose pour le client excepté qu’il prend en paramètre l’adresse IP du serveur. On peut par la suite échanger des messages avec les fonctions send() et receive().

Conclusion


Quoi que votre jeu utilise comme architecture, RakNet peut répondre à vos besoins. L’engin est efficace tant pour les applications P2P que pour les applications client-serveur.

RakNet a amplement répondu à tous nos besoins pour réaliser notre jeu et offre beaucoup d’autres fonctionnalités que nous n’avons même pas eu le temps de regarder.

RakNet nous a permis de programmer nos échanges de messages sans nous soucier de la gestion des connexions.

RakNet est facile à utiliser, possède de bons tutoriels et de bons manuels utilisateurs. Pour réaliser un projet de l’envergure d’un projet universitaire, je recommande sans problème l’utilisation de RakNet.

similaire:

Rapport d’outil RakNet iconRapport d’outils Raknet
«Raknet», ce document est donc une explication de certains des principes de «Raknet» ainsi que de ses concepts fondamentaux et comment...

Rapport d’outil RakNet iconArchitecture d'une machine outil

Rapport d’outil RakNet iconFiche outil «Les documents du cdi»

Rapport d’outil RakNet iconOutil d’inspection Maîtrise de la dégradation des enveloppes

Rapport d’outil RakNet iconDe la technologie à l'école maternelle à l'hypertechnologie comme outil pour la formation

Rapport d’outil RakNet iconDéploiement de Microsoft Lync Server 2010 Enterprise Edition à l’aide...

Rapport d’outil RakNet iconBarthaux- tel : 06 73 24 92 23 Equipe
«Le cahier des charges est en outre un outil fondamental de communication» (wikipédia)

Rapport d’outil RakNet iconAltera accélère la productivité du design fpga avec la version 10....

Rapport d’outil RakNet iconArbor Networks et Jigsaw, filiale d’Alphabet, collaborent à l’amélioration...

Rapport d’outil RakNet iconThème 3b activité : Les aires corticales motrices spécialisées
«intact» : son utilisation comme outil diagnostique n’a pas révélé de lésions médullaires








Tous droits réservés. Copyright © 2016
contacts
ar.21-bal.com