Open RPG - Portail de jeux php

Samedi, Mai 19, 2012
Blog Websocket - firefox - Node
Tweet me!

Comme toujours, lorsque je n'arrive pas à faire un truc, je cherche et je trouve du moins j’essaie de trouver. Actuellement, j'ai un soucis avec les websockets et Firefox car Firefox a une latence lors de la déconnexion d'un utilisateur (de 20 secondes). Je me permet donc de contacter Paul Rouget via Twitter car d'après ce que j'ai pu comprendre c'est le pionner dans le monde fabuleux de Firefox donc j'en déduit qu'il pourra m'aider ou me mettre sur le chemin d'une solution contraite ou du moins chercher le comment du pourquoi. Voilà les réponses que j'ai eu :

@wubart Assure toi que ce ne soit pas un bug coté server (impl. version 0.76)

@wubart J'ai toujours pas compris ton bug en fait. Fais moi un reduced test case, et je pourrais t'aider.

@wubart Je ne vais pas débugger ton PHP. Ce que je peux te dire, c'est que la déconnexion fonctionne très bien ici avec mon server node.

En gros c'est de mon cote que vient le problème et qui produit le non fonctionnement de mon programme mais que tout va bien du coté de Firefox. OK je veux bien l'admettre, donc je suis son conseil et j'installe et configure un serveur Node (qui est très bien d'ailleurs). Bien entendu pour faire la par des choses, je n'utilise pas mon code mais une simple potion de code qui ne fait qu'une connexion et envois une petite phrase.

<script type="text/javascript">
    var connect = function() {
        if (window["WebSocket"]) {
            conn = new WebSocket("ws://localhost:8000/test");
           
            conn.onmessage = function(evt) {
                log(evt.data);
            };
           
            conn.onerror = function() {
                log("error");
            };
           
            conn.onclose = function() {
                log("onclose");
            };
   
            conn.onopen = function() {
                log("opened");
            };
        }
    };
   
    function test()
    {
        conn.send("test message");
    }
   
    window.onload = connect;
    window.onunload = function() { conn.close(); };
</script>
<input type="button" value="test" onClick="test()"/>

Et on peut pas dire que les résultats soient concluant voir identique d'avec mon ancien serveur PHP. Mais pour mieux comprendre, j'ai encore fait une petite vidéo :

Voir la vidéo en HD

Donc pour résumer, mon jeu proposera le système de websocket pour voir les autres joueurs se balader sur les cartes mais uniquement sur Chrome, Safari et Opéra (mais pour opéra je dois trouver une solution car il est réactif cela étant il déconnecte correctement mais si on refresh la page il connecte correctement et ensuite il déconnecte l'ancienne session va savoir pourquoi)

PS : je tiens à remercier @paraboul qui bosse sur le projet APE

@wubart Simplement parce que je pense que ton server WS envois le close au niveau TCP et non une WS close frame.

Commentaires  

 
-1 #3 DarthTonio 01-03-2011 22:00
As tu testé Comet comme je te l'avais indiqué dans mon mail (09/02) ?

Antoine G.
voici le contenu de mon mail :
Citer :
Bonjour,

Félicitation pour ton boulot monstre ! Sache qu'en attendant que les Web chaussettes soient bien gérées, tu peux t'appuyer sur des technologies comme Comet. C'est de l'Ajax qui simule un Server->Client (Push).
C'est utilisé par le chat de Gmail par exemple. Par facebook aussi il me semble.
En gros tu fais une requête ajax de base mais très très longue vers un script php qui tourne en boucle :
while(true){
if(Personage::N ewPosition())
echo Personage::Posi tion();
if($secondesEco ulees > 30)
break;
}

Voilà un petit article :
http://www.metal3d.org/index.php/blog/ticket/2009/12/13/Serveur-Comet-ou-Long-polling-avec-Ajax

Bonne continuation !

Antoine
Citer
 
 
-2 #2 Demetrio 01-03-2011 09:18
Alors finalement multijoueurs pas multijoueurs ? ....Multijoueurs ? :)
Pour ma part je pense qu'un jeu ne peux pas présenter des fonctionalités différentes en fonction du navigateur, s'il ne peut pas les assurer partout de la même manière, il ne faut pas les implémenter, enfin c'est mon avis...
Citer
 
 
-2 #1 Dimitri 28-02-2011 09:37
Hello

Et en jouant sur la fenêtre du timeout des sockets ?

Dans ton php.ini, ya un paramètre du type (en sec)
default_socket_ timeout = x

L'idée est de mettre un petit timeout et de "rafraichir la session" avec un timer côté client qui fait appel au serveur pour lui signifier qu'il est toujours actif

Je testerai tes scripts dans la journée pour essayer de donner un coup de main car je suis pris là a++

ps : décidément ton projet est trop prenant. J'ai testé sous firefox 4 w32, XAMPP, avec tes scripts sur localhost et la deconnexion est immédiate sous firefox. A regarder de plus prêt ce soir..
Citer
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Mes derniers tweets

wubart: @lilicastille Alors c'est pour quand le prochain marathon ? hi hi hi
wubart: “@NARDEAU: @dzeis @wubart @lilicastille des hauts talons, une jupe et pas de dessous” #reve
wubart: @lilicastille PS : ce matin grave a la bourre j'suis arrivé a 13h pu..in de réveil !!!!
wubart: @lilicastille @dzeis @nardeau c'est a cause du #petitjournal hi hi hi cela étant t'as pas retenu le compliment des chaussures :(
wubart: RT @DespoRutti93: J'connais des femmes mariées si chaude qu'elles choperaient un rhume en enfer

Espace publicité

Connexion à votre compte