|
Pages: [1]
|
 |
|
Auteur
|
Sujet: Probleme de deconnexion du client (Lu 257 fois)
|
loupstigrou
Newbie

Messages: 26
|
Hello !
J'ai un petit problème, en effet, j'ai remarqué que quand mon ADSL bug alors que je suis connecté à mon jeu, mon personnage reste connecté au serveur comme si j'étais toujours en ligne. En gros, quand ma connexion internet ou celle des autres joueurs coupe, le serveur croit qu'il est toujours là en train de jouer et il ne supprime donc pas le joueur du tableau des clients.
Comment puis-je faire pour résoudre ce problème ?
J'ai aussi une autre question, comment detecter l'inactivité d'un joueur ? PAr exemple je pars de chez moi précipitemment et j'ai oublié de me déconnecter du jeu. J'aimerai par exemple que le joueur soit déconnecté au bout de 30 min d'inactivité. Comment puis-je faire ? Je code quelque chose au niveau du serveur ou au niveau du client flash? Si je code sur le serveur, ça permettrait peut être de résoudre le problème quand internet coupe car le joueur devient ainsi inactif ?
Merci d'avance ^^
|
|
|
|
|
Journalisée
|
|
|
|
|
seal3
|
Salut !
Oui c'est normal que le serveur ne recoive rien, la coupure du socket comme quand on ferme le navigateur est en soit un message envoyé au serveur. Normalement le serveur fini tôt ou tard par le detecter et à le conciderer comme deconnecté. Si tu utilise ton propre script serveur tu peux regler ça en parametrant un keepalive sur la socket du client. Par contre ce n'est pas fiable tous les systemes ne l'utilisent pas forcement.
Une bonne approche serait de programmer au niveau du client un timeout qui envoie toutes les 20 secondes un petit message au serveur disant "coucou je suis toujours la". Côté serveur il suffit alors de faire une boucle et de voir depuis quand un client n'a rien envoyé. Si le delai depasse 25 secondes (+5 sec en cas de lag) alors le serveur le deco de lui même.
Pour la seconde question tu peux faire comme indiqué ci-dessus sauf qu'au lieu d'un time out il s'agirait de mesurer l'activité du client. Sinon plus simplement côté client programmer le fait que le gars ne fait rien pendant x minutes il se deco de lui même.
|
|
|
|
|
Journalisée
|
|
|
|
loupstigrou
Newbie

Messages: 26
|
Je vois ! Mais comment je fais, je place où cette boucle qui surveille les messages "coucou je suis là"? Dans une fonction à part où alors dans "onClientMessage($uid,$msg)" ?
Ensuite, je fais une boucle infinie avec un sleep(25); à l'intérieur pour la bloquer 25 secondes ? J'ai pense à un truc du genre :
Le client envoit "LA" toutes les 20 Secondes, quand le serveur reçoit "LA" du client $uid, la variable $clientList[$uid]['presence'] = true;
Ensuite, au bout de 25 secondes, le serveur vérifie si $clientList[$uid]['presence']==true, si oui, il remet la variable à false. Par contre, si elle est à false, il déconnecte le client.
ça marcherait ? Mais la boucle, elle commence à quelle moment et je la place où ? Dans la partie où le serveur reçoit le message du client ? Un exemple ?
|
|
|
|
|
Journalisée
|
|
|
|
|
seal3
|
Non ya plus simple. Quand le serveur recoit un "LA" d'un client il mémorise pour ce client l'heure actuelle :
$clientList[$uid]['presence'] = time();
Apres pour faire la verif c'est simple, à chaque fois que le serveur recoit un message il faut un test pour savoir quand est-ce la derniere fois qu'il à fait une verif de présence (avec une simple variable globale et un if pour tester si ça fait moins de 20 sec par ex). Si il doit faire la verif de presence il parcours alors tous les client et fait en gros :
$elapsed=time()-$clientList[$uid]['presence'];
si $elapsed > 25 alors il kill ce user.
Du coup cette fonction ne marchera que si le serveur recoit des message, on se fout un peu de la précision du test. Il aura tôt ou tard un client qui lui envera un message et cela lancera donc la fonction de test de presence.
|
|
|
|
|
Journalisée
|
|
|
|
loupstigrou
Newbie

Messages: 26
|
Ah super ça marche niquel merci ^^ Par contre, j'ai un autre probleme.. ^^" Mon jeu est fait en plusieurs images clées. Mais quand j'appuis sur CTRL + flèche de droite ou de gauche du clavier, ça change d'image clée sur la timeline.. Et impossible de trouver pourquoi.. Une idée ? Je suis sur flash CS3 en actionscript 3. Encore merci de nous apporter votre aide 
|
|
|
|
|
Journalisée
|
|
|
|
loupstigrou
Newbie

Messages: 26
|
Problème résolu, il faut en fait désactiver les raccourcis de Flash player en faisant : fscommand("trapallkeys","true"); Voilà 
|
|
|
|
|
Journalisée
|
|
|
|
|
|
Pages: [1]
|
|
|
 |