JeuWeb - Crée ton jeu par navigateur
Détecter la fermeture du navigateur coté server - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Détecter la fermeture du navigateur coté server (/showthread.php?tid=581)

Pages : 1 2 3


RE: Détecter la fermeture du navigateur coté server - Argorate - 20-02-2011

Moi aussi a un moment je voulais faire un jeu qui nécessitait de savoir quand un joueur quitter le jeu. J'ai abandonné l'idée en voyant que ce n'étais pas possible.
L'astuce consistant a dire que s'il ne fait pas de rafrech durant X minutes <=> déconnecté peu fonctionner certes, mais n'est pas suffisante.
En effet, un décalage de 5min est énorme! En 5min il peux se passer des tas de choses que tu ne contrôlent pas.

Après perdre des ressources clients et serveur en faisant de l'ajax pour rafrechir un timestamp pour savoir s'il est encore là, c'est franchement du gâchis non?

En revanche s'il existe un moyen de détecter la fermeture de la connexion avec un serveur push et de pouvoir le transmettre au serveur, cela pourrait être intéressant, c'est faisable avec beacon push par exemple?


RE: Détecter la fermeture du navigateur coté server - niahoo - 20-02-2011

Ben beacon push c'est dans l'autre sens ! Donc je dirais non.

Par contre, si au lieu de recenser en permanence quels joueurs sont en ligne, tu peux déterminer à quel moment tu as besoin de savoir quel joueur est en ligne, alors là le push est utile :

Si tu as besoin de savoir si joueur/12 est en ligne, alors tu envoies un push a joueur/12 et s'il n'a pas répondu avec AJAX en 10 secondes alors il est déco.

Mais ça nécéssite de pouvoir attendre ces 10 secondes, donc de bosser en asynchrone et pas de faire ça pendant un rafraichissement de page par exemple.


RE: Détecter la fermeture du navigateur coté server - barst - 31-03-2011

Vous pouvez une solution basée sur l'évènement "onBeforeUnload" :
Code :
<html>
<head>
    <title></title>
    <script language="javascript">
        //Avant la fermeture de la fenêtre on appelle notre fonction closeIt
        window.onbeforeunload = closeIt;
    
        //On instancie la variable de test à vrai
        var allowPrompt = true;
        
        //Fonction qui va regardé si on ferme la page
        function closeIt()
        {
            //Si la variable renvoie vrai c'est qu'on ferme la fenêtre
            if(allowPrompt)
            {
                alert("Ferme")
                // On peut aussi appeler un script avec => location.href="http://monsite.fr/script.php"
            }
            else
            {
                alert("Ouvert")
            }
        }
        
        //Cette fonction et appelé par chaque lien avec l'événement Onclick
        function NoPrompt()
        {
            allowPrompt = false;
        }
    </script>
</head>
<body>
    Page 1 : Have fun xD!!!
    
    <a href="page2.html" Onclick="NoPrompt()">test d'un lien</a>
</body>
</html>

Cette solution provient du lien suivant http://www.commentcamarche.net/forum/affich-2815788-javascript-detecter-l-evenement-fermeture

Maintenant en remplaçant l'alert() par un appel AJAX à ton serveur tu as ta solution.