En fait dès que mon serveur php reçoit la chaine "<policy-file-request/>", il renvoie au client : '<cross-domain-policy><allow-access-from domain="*" to-ports=22222/></cross-domain-policy>'.chr(0)
Donc je n'ai pas de fichier xml. C'est bien ce qu'il faut faire ? Il me faut peut-être un fichier crossDomain.xml en plus sur le site ?
C'est curieux que ton flash player ne réclame jamais de policy-file ! Attention je ne parle pas du crossDomain.xml mais bien du policy-file niveau socket hein ^^
Ok ! Donc ça explique pourquoi certains clients ne demandent pas ce policy-file... Pourtant, après avoir checké, j'ai bien Flash player 10, mais mon Flash ne demande jamais de policy-file au serveur Je suis un peu perdu
Sinon, ce qui me fait penser à un problème venant du client, c'est juste que ça a vraiment l'air de s'acharner sur des joueurs en particulier.
Nouveau cas hier : un mec s'inscrit et entre 16h14 et 16h31, il a essayé de se connecter 11 fois mais le serveur n'a reçu aucune de ses demandes... Résultat, il a n'a même pas pu tester le jeu Pendant ce temps là, le serveur php tournait sans problème et n'était pas du tout surchargé ou bloqué...
Tu crois que ça pourrait être leur version de Flash (peut-être plus ancienne) qui rendrait les connections au serveur difficile, voire impossible ?
Ou alors le port utilisé par le serveur php qui serait inaccessible depuis chez eux ? Pour info, j'ai laissé le port du tuto : "22222".
Sinon, j'ai bien vérifié et le serveur ne semble pas bloquer. Le close ne semble pas poser problème non plus.
Par contre, est-ce que Flash réclame automatiquement et systématiquement le policy-file ? Car dans la plupart des cas, la connexion se passe exactement comme tu l'as dis : en 2 fois. Mais dans certains cas, j'ai l'impression que Flash ne réclame pas ce policy-file... La connection se déroule alors correctement qd même, mais en une seule fois. C'est normal ?
Pour les TIME_WAIT, je ne vois pas du tout ce que c'est mais j'imagine que ça doit se situer au niveau de la machine qui fait tourner le script ?
Pour le nombre de connecté, le problème se pose même quand il y a moins de 10 connectés donc ça ne doit pas être ça ^^ certains joueurs ont l'air d'ailleurs beaucoup plus touché que d'autres... Je me demande si c'est pas peut-être une erreur de parefeu ou truc dans le genre qui viendrait du client ?
Il faut s'assurer déja que le serveur ne bloque pas quelque part due à un socket bloquant ou par exemple un close() qui bloque .
Ensuite il faut regarder du côté du flash, active les log du flash player (tu trouveras sur google) cela t'indiquera si ya eu un soucis de policy-file à un moment donné.
Justement pour le policy-file, assure toi que le client ne se connecte pas au moment ou ton script serveur envoie un message à tout le monde. Pour rappel, le client flash se connecte 2 fois au script socket. La premiere fois il réclame le policy-file puis close la connection. La seconde fois il etablit la vraie connection utilisable dans flash.
Apres faut voir au niveau du serveur. Est-ce que le serveur ne genere pas des TIME_WAIT (je dis ça parceque j'ai eu ce prob il y'a peu) empechant l'arrivée de nouvelle connections. Est-ce que le script php n'a pas de limite dans le nombre de connections simu (c'est réglable surement, mais de ce que tu dis ça ne dépend pas du nombre de co).
Alors, finalement je n'ai pas mis l'option SO_LINGER : du coup je vérifierai s'il arrive que socket_close puisse bloquer, si ça n'arrive pas, ce sera tant mieux
Par contre, j'ai l'impression que le problème de la connexion impossible se reproduit quand même de temps en temps... Jusqu'à il y a 2 minutes, je croyais que ça concernait uniquement les joueurs fraîchement inscrits mais là je viens tout juste d'avoir le cas !
A chaque connection impossible détectée, ça m'envoie un mail donc j'en rate aucune ^^
C'est bizar, dans ces cas là, ça a vraiment le même effet que si le serveur était coupé : - Le serveur lui ne reçoit aucun message, donc il ne renvoie rien... - Flash lui, comme il ne reçoit rien, fait échouer l'event onConnect...
J'ai pourtant regardé les logs du serveur aux heures de ces connections échouées, et cette fois-ci il n'a l'air ni bloqué, ni parti en vacances... Je comprends juste pas
Là, je viens d'avoir l'erreur mais il a suffit que je recommence pour que ça remarche directement.
Malheureusement, j'ai le cas d'un joueur fraîchement inscrit qui a réussi à se connecter 1 fois hier. Puis il a ensuite fait 19 tentatives de connection dans la journée, sans qu'aucune ne réussisse !
Et biensûr, à chaque fois le serveur semble n'avoir aucune trace de ses tentatives de connection.
Si tu as une piste ou une idée, ça me sauverait encore une fois la vie Merci beaucoup !!
Je suis en train de réfléchir à la façon de coder un jeu en tour par tour (et non pas en temps réel).
Comment faire pour que les différents joueurs jouent chacun leur tour ? Faut il définir un temps pour un tour sur le client ou peut ont automatiquement sur le serveur créer quelquechose qui envoit un message toutes les 30 secondes par exemple, indiquant ainsi qui doit jouer?
Et comment faire pour gérer plusieurs parties simultanées ?
Par exemple, C'est au tour de Julien, un compteur se lance (30 secondes), au bout de ce temps, c'est au tour de Roger (qui est le deuxième joueur). Le compteur se lance à nouveau pour 30 secondes, puis c'est à nouveau au tour de Julien. Ce compteur de temps, il se situe où ? L'idéal serait sur le serveur pour éviter toute tricherie côté client. Mais comment faire ?
Du coup, ce serait Flash qui déclencherait onClose avant onData ?
En AS2 j'ai pas l'impression que ça marche de la même manière qu'en AS3. On dirait qu'on a beaucoup moins de contrôle.
Mais je suis pas sûr que ce soit le Flash qui pose problème car, sans ce SO_LINGER, Flash appelle bien onData avant onClose, même si le socket_close() est juste derrière le socket_write()