Synchronization réseau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Synchronization réseau

Message par Progi1984 »

Voilà je prépare le game design document pour un jeu que je prépare et je bute sur un problème.

Voilà, mon jeu sera basé de deux clients dont l'un fera le serveur (jouable via le Net).

Comment lancer au même moment sur les deux postes le même message ?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Je réfléchis à cela depuis quelques heures déjà.

P1 et P2 sont les deux players.
P1 = 10h40
P2 = 9h30
NTP = 10h00
(sont vraiment pas à l'heure)
- P1 est le serveur
- P2 se connecte à P1.
- P1 et P2 se connectent à un serveur de temps pour avoir l'heure globale sur GreenWich.
- P1 et P2 font la différence avec l'heure sur leur poste. (P1 = +40 ; P2 = -30)
- P2 envoie à P1 la différence (=-30)
- P1 décide qu'à 10h05 (NTP) un message sera affiché !
-- Donc pour P1 (10h45).
-- NTP(10h05) + P2 (=-30) = 9h35
- P1 envoie à P2 : 9h35
- Ainsi à 9h35 pour P2 et 10h45 pour P1, un message s'affichera.

Est ce viable ?
Sinon comment l'améliorer ?
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Houla... Pourquoi ne pas simplement ignorer l'heure et envoyer un packet du serveur vers le client au moment d'afficher le message?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Parce que il doit etre affiché au meme moment sur les deux postes !
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

et?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Disons qu'avec le lag réseau (jeu via Internet)... ils seront affichés avec qques secondes de différences.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

quelques secondes non, quelques dixiemes, voir centiemes, est ce bien un probleme? tu n'arrivera de toutes facons pas a avoir une synchro parfaite, meme avec l'heure.
Anonyme

Message par Anonyme »

tout à fait daccord avec poshu, tu n'a pas à te soucier de l'horraire.
mais faire une appli reseau est très compliqué, meme si pb dispose de commandes toutes faite, beaucoup de chose doivent être réalisé à coté afin d'obtenir une appli stable et fonctionnelle.

@++
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui c'est vrai que ce n'est pas simple.

tu pourrais peut etre utiliser la lib : K-NetLib - Multiplayer Library de Krylar's Kreations
elle est disponible pour PB3.94 et PB4.0.
http://www.krylarskreations.com/knl.shtml
http://www.krylarskreations.com/KNL_help/

sans avoir jamais testé cette lib, j'en ai entendu beaucoup de bien.
elle est spécialement dédiée au jeu en réseau à plusieurs joueurs.

si ca peut t'aider à ne pas réinventer la roue ou au moins à t'inspirer.

comme ils disent eux-même :
You'll shave MONTHS off of your multiuser development cycle!
traduction: tu vas économiser des mois de développement....
Image
Anonyme

Message par Anonyme »

traduction: tu vas économiser des mois de développement....
Faut p'tet pas abusé non plus... j'en avait fait une justement pour un ami qui utilise un autre langage, cela à du prendre une demi-journée pour écrire le squelette, puis une semaine pour les tests, et on avait un emplois du temps chargé. je comptais faire une userlib pour nous ici, mais c'était avant de perdre mon DD :( et donc toutes mes sources...

il y a quelques base à respecter en reseau concernant l'envois et la reception
- tout dabord, moi je "tag" tout mes messages, comme ca, à l'arrivé d'un message, grace au tag prédéfini par moi même il est aisé de traitré l'information.
- ne pas faire l'erreur d'envoyer des messages en temps réels quand il n'y en a pas l'utilitée , voyez pour un envois à intervalle regulier tout les 25,50,75 ms
- pour un jeu en ligne , un système de prédiction des positions est nécéssaire pour éviter une "vibration" de la position sur les clients.
c-a-d que j'envois juste l'état des touches du clavier, si le client A appuis sur avancer alors le serveur sait qu'il avance, si il relache il n'avance plus etc...
- faire une mise à jour des positions de tout les joueurs à intervalle régulier en parallèle du système de prédilection afin d'évité tout décalage de coordonées entre les pc

je m'étais fait une serie de fonctions pop/push, je m'explique, je créer un buffer vide, puis via des fct° comme PushFloat(Float.f) j'ajoute un float dans le buffer, après je peut faire un pushstring($) etc... puis un Sendmessage(TAG), il m'envois et vide le buffer, pareil pour la réception, j'avais créer un système performant de "file d'attente des messages"
j'avais un thread spécialement concu pour l'écoute et pour gerer l'arrivée des messages, un autre pour les traités.
Si j'ai le temps je me repenche dessus ^^

je vais quand même jeter un oeil à la lib du dessus voir se qu'elle offre :D

@++
Répondre