IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Node JS socket IO => un enfer sans solution sur mobile?


Sujet :

NodeJS

  1. #1
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut Node JS socket IO => un enfer sans solution sur mobile?
    Salut,
    Je suis entrain de réaliser une application web temps réel avec socket io et ca fonctionne parfaitement sur navigateur sur ordinateur, cependant sur mobile c'est l'enfer, le socket se déconnecte lorsque :
    _ l'onglet est trop longtemps inactif
    _ la mémoire du téléphone se libere pour laisser de la place à une autre application
    _ le telephone se trouve sur le lock screen

    je cherche depuis des jours une solution mais je ne trouve rien ... existe il une solution ou dois je abandonner ?

    merci

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Quelle est la version exacte du browser sur desktop et même question pour la version mobile.

  3. #3
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut
    Chrome

    mobile : 66.0.3359.106

    pc : Version 65.0.3325.181 (Build officiel) (64 bits)

    ( sur pc ca fonctionne bien avec tous les navigateurs même sur mac )

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    A première vue je trouve rien de concluant en recherche rapide sur Google.

    Ca vaudrait le coup de tester avec un autre navigateur sur mobile (Firefox par exemple) pour voir si le comportement est transverse aux browsers. Ça pourrait indiquer qu'il s'agit d'un comportement système (quel OS mobile du coup ?).

  5. #5
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut
    j'ai vu des gens parler de WakeLock et de WifiLock pour android et IOS malheureusement c'est en natif que ca existe,
    j'ai même testé un code javascript qui s’appelle NoSleep.js qui permet de wake lock l'application ( fait tourner une vidéo courte en arrière plan en boucle ) du coup là l'application semble moins déconner souvent quand on la met en arrière plan mais quand le telephone se lock c'est pareil
    mais quand on regarde le forum les gens disent que avec IOS 11 ca fonctionne plus ...

    je teste ca sur un téléphone récent android 8.0 et un ancien avec Android 4.4.2

    edit: je vais essayer de voir avec firefox ce que ca donne !

  6. #6
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut
    pareil pour firefox sur mobile

  7. #7
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut
    Hello,

    j'ai compris d'où vient le problème et j'ai réussi à trouver 1 solutions que j'ai mis en pratique et 1 solutions dont je sais pas si c'est possible à mettre en place,

    en faite les navigateurs web quand ils sont en background ne font pas tourner le javascript, du coup au bout d'un moment le "heartbreak" de node js n'a plus de réponse et donc il ferme le socket ....


    ma solution qui fonctionne ca a été de créer une application Android ( j'ai fait avec xamarin ) dans la quel j'ai mis une simple web-view et j'ai appliqué sur l'activity un wake lock et un wi fi lock, du coup dans la web view qui elle même est dans une appli android, le javascript tourne quand même ! j'ai fait des tests, sur navigateur en moins de 10 minutes j'ai une déconnection alors qu'avec l'application tant que j'ai une connexion internet active ca fonctionne !

    Le problème de cette solution => seulement android pas IOS et je me suis fait refouler par google store car faut prouver qu'on a pas utilisé un outil de generation automatique d'apk et prouvé que le site nous appartient !





    la deuxième solution que je sais pas comment faire et qui serait énorme si c’était possible :

    - c'est de détecter quand la page du navigateur web se met en hidden ( ca je sais faire avec document.addEventListener('visibilitychange',...)

    - quand c'est l'evenement hidden alors => on dit au serveur que le socket ne doit pas être déconnecté même si y a pas de réponse pendant 1 h !
    - quand l'evenement visible alors => on dit au serveur que le socket peut reprendre sa vie normale !


    mais je sais pas du tout si c'est possible

  8. #8
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    En fait tu devrais tout simplement utiliser un service worker. C'est pas dispo dans tous les navigateurs par contre. Chrome et Firefox only. Le superbe cookbook de Mozilla devait t'aider

  9. #9
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut
    Salut,
    j'ai déjà un service worker sur mon site mais je t'avoue je ne vois pas comment il peut m'aider pour mon problème ! as tu une idée ?

    merci

  10. #10
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Ben tu dis que c'est Node.js qui ferme le socket parce qu'il ne voit plus d'activité. Peut être que si tu ping ton node régulièrement depuis un service worker ça va le faire. Sauf si les services workers dorment également ça je ne sais pas.

  11. #11
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 115
    Points : 507
    Points
    507
    Par défaut
    J'ai résolu mon problème en créant un 3 ème état qui est l'état Javascript AFK

    J'ai mis dans les options du socket un ping intérval de 25 second et un ping time out de 1 h, du coup il faut que le ping ping de node js n'ai pas de réponse pendant 1 h pour de couper

    Ensuite pour vérifier mon 3 ème état j'ai créer mon propre ping pong toutes les 25 secondes le serveur envois un ping à mon client et le client renvois un pong aussi sec du coup si au bout de 60 secondes mon client n'a pas renvoyé de pong je le considère javascript afk et je l'affiche en jaune

    Cet état peut être atteins de 2 façon, soit le javascript est inactif donc le navigateur en background sur mobile
    Soit il y a une coupure de l'application de. Façon brute cet à dire moi j'ai détecter seulement la perte de connections internet pour ce cas de figure

    Donc en gros si le gars perd sa connection internet il passe en javascript afk
    Donc la différence avec avant c'est qu'un gars qui perdait sa connection était déconnecté complètement après 60 secondes du pingtimeout de base
    Et maintenant au bout de 60 secondes il passe en javascript afk et est déconnecté après 1 h

    J'espère que ca pourra aider certain

Discussions similaires

  1. Return value avec Node.js / socket.on
    Par teddol dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/06/2017, 15h25
  2. Réponses: 1
    Dernier message: 27/06/2015, 12h44
  3. Réponses: 7
    Dernier message: 23/07/2005, 13h50
  4. [VB6] Déplacer la form sans cliquer sur la barre de titre
    Par Ingham dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/11/2002, 03h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo