![]() |
Nodejs - Fermeture de connexion - 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 : Nodejs - Fermeture de connexion (/showthread.php?tid=6473) |
Nodejs - Fermeture de connexion - Damocorp - 30-10-2012 Bonjour, Je m'amuse toujours a tester nodejs et socket.io pour mon tchat. Tout fonctionne nickel que ce soit le tchat, mon système de transfert d'objet etc... Mais voila que je me heurte à un problème con. La liste des gens actuellement connectés. J'ai accès à leur login. Je stock tout cela dans un tableau. Et lorsque que quelqu'un se déconnecte, je retire simplement le login du tableau. Mais quand quelqu'un clique sur un lien, ferme le navigateur, je n'arrive pas à trouver le moyen de voir que la connexion est rompu. Je peux éviter les doubles entrée dans le tableau. Mais si je me connecte avec x comptes différents, les x logins restent présent dans mon tableau. RE: Nodejs - Fermeture de connexion - Ter Rowan - 30-10-2012 Regarde du coté des événements ( j ai plus en tête le nom de l événement, l équivalent de onload mais a l envers) Par contre je çrois que tu ne peux pas tout capter Une autre solution qui me vient en tête(sans verif) est d envoyer via ta chaussette une question es tu la au client toutes les x secondes. Si il ne répond pas, c est qu il n est plus la RE: Nodejs - Fermeture de connexion - Astarion - 30-10-2012 Evénement coté serveur : socket.on('disconnect', function() { }); Que ça pour une fermeture de l'onglet, un changement de page, etc cela fonctionne... A toi de traiter ça comme il faut derrière ! RE: Nodejs - Fermeture de connexion - Maks - 30-10-2012 http://socket.io/#how-to-use ... RE: Nodejs - Fermeture de connexion - quentin01 - 30-10-2012 Des fois des petites recherches ça fait pas de mal ... http://www.jeuweb.org/showthread.php?tid=8174&pid=104222#pid104222 RE: Nodejs - Fermeture de connexion - Damocorp - 30-10-2012 Citation :Des fois des petites recherches ça fait pas de mal ... http://www.jeuweb.org/showthread.php?tid...#pid104222 Citation :http://socket.io/#how-to-use ...C'est sympa de me le rappeler, mais j'avais déjà lu tout cela avant de poster. Citation :socket.on('disconnect', function() { Citation :Par contre je çrois que tu ne peux pas tout capterMalheureusement Ter Rowan semble avoir raison vu le nombre de post traitant du sujet que j'ai trouvé sur stackoverflow. Ce qui est bizarre, c'est que mes tests semblent bien détecté la déconnexion. Puisque le console.log() enregistre l'information ( mais pas toujours apparement ). Mais l'emit n'est pas envoyé ( et non présent dans la console ) ! Exemple du test : Le server => [pastebin]M4wXFMN8[/pastebin] Le client => [pastebin]riaRditf[/pastebin] Résultats : Déconnexion YBSeLXI7YSmWWIKJVc8c obtenu lorsque sous firefox je clic sur un lien ou ferme l'onglet. Rien n'est obtenu lorsque sous Opéra je clic sur un lien ou ferme l'onglet. Rien n'est reçu par Opéra ou Firefox ( le emit ) même si le console.log() indique la déconnexion. Citation :ne autre solution qui me vient en tête(sans verif) est d envoyer via ta chaussette une question es tu la au client toutes les x secondes. Si il ne répond pas, c est qu il n est plus laJe comptais justement partir sur une solution similaire. Chaque client va recevoir de la part des autres clients : le login du client connecté + un ttl. Et un simple setInterval qui virera les ttl qui dépasse x secondes. Mais ta solution me semble plus approprié. J'vais tester cela. RE: Nodejs - Fermeture de connexion - Maks - 30-10-2012 (30-10-2012, 05:53 PM)Damocorp a écrit :Citation :Des fois des petites recherches ça fait pas de mal ... http://www.jeuweb.org/showthread.php?tid...#pid104222Citation :http://socket.io/#how-to-use ...C'est sympa de me le rappeler, mais j'avais déjà lu tout cela avant de poster. Lire c'est bien, essayer de comprendre c'est mieux Citation :Ce qui est bizarre, c'est que mes tests semblent bien détecté la déconnexion. Puisque le console.log() enregistre l'information ( mais pas toujours apparement ). Mais l'emit n'est pas envoyé ( et non présent dans la console ) ! La méthode emit() envoie au client, seulement tu viens de te déconnecter...
Tu ne devrais pas être obligé de donner ce chemin relatif ni de vérifier l'existence de "io" coté client RE: Nodejs - Fermeture de connexion - Damocorp - 30-10-2012 Citation :Tu ne devrais pas être obligé de donner ce chemin relatif ni de vérifier l'existence de "io" coté clientJ'ai du merder l'installation car sans chemin absolu, pas moyen de trouver le module. Mais bon c'est que des tests, je réinstallerai encore tout cela pour de futur tests pour bien comprendre la différence entre une installation locale et globale que je pige pas totalement. Citation :Tu ne devrais pas être obligé de donner ce chemin relatif ni de vérifier l'existence de "io" coté clientje n'aime pas les erreur, ca me tape sur le système et tant que j'ai pas stabilisé mon installation , j'utilise juste un moyen de virer l'erreur ![]() Donc à la déconnexion, la fonction callback() s'execute aléatoirement ? Car le console.log() devrait au moins toujours être présent non ? RE: Nodejs - Fermeture de connexion - Maks - 30-10-2012 Oui tu as du foiré quelque chose à l'installation ^^ Tu peux installer localement et globalement si tu le souhaites, ça ne prend pas beaucoup de places de toute façon. Ton Socket.IO doit être installé localement (donc sans -g) pour y accéder depuis ton script avec require('socket.io') A la déconnexion ton callback s’exécute toujours en théorie, je n'ai jamais eu de problème de ce côté. Dans ta liste de transports, tu as quoi après websockets ? Sur Opera ça fait un moment que j'ai pas testé, l'ancienne version c'était du JSON-polling. Essaie de mettre le XHR polling en second dans la liste voir si c'est plus fiable. Le console.log sera toujours présent oui vu qu'il dépend de ton daemon. Seulement le emit() ne peut fonctionner car le client s'est déconnecté. Il faut faire socket.broadcast.emit.to('nom_de_la_room') ou io.sockets.emit pour envoyer à tout le monde quelque soit la room RE: Nodejs - Fermeture de connexion - Damocorp - 30-10-2012 Citation :Tu peux installer localement et globalement si tu le souhaites, ça ne prend pas beaucoup de places de toute façon.Ce qui m'embête le plus en local, c'est que quelqu'un qui connais socket.io saura qu'il peut aller chercher les fichiers depuis l'url. Et comme je n'utilise pas de réecriture d'url pour Damocorp, ca m'embête un peu. D'un autre côté je compte bien utiliser socket.io dans d'autre projet. L'installation globale est pour cela tout a fait approprié. Et comme c'est un script qui va tourner via forever, le chemin absolu n'est pas dérangeant, au moins seul lui à accès au fichier. Je sais que ca fait parano, mais étant noob et apprenant sur le tas, j'ai toujours peur de raté un truc qui filerai le moyen à quelqu'un de bousiller quoique ce soit sur le serveur. Surtout parce que je sais que la boulette viendrai de moi ![]() Sous firefox j'ai ceci : Code : info - socket.io started sous opéra : Code : info - socket.io started Donc si j'ai bien pigé, il est déjà en XHR polling. Et comme tu peux le constater, firefox renvoi bien le console.log ( Déconnexion ULftXa7r7zGX3w99C8O3 ). Tandis qu'Opéra ne fait rien. |