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

JavaScript Discussion :

Vérifier la disponibilité d'un service en temps réel


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut Vérifier la disponibilité d'un service en temps réel
    Bonjour,

    j'ai une problématique très simple que je n'arrive pas à résoudre.

    Sur mon projet actuel, quand des modifications en BDD ont lieu, tout passe par des services web, donc lors d'une mise en production, toute modif de données est impossible et résultent en un timeout.

    Le cas concret, supposons que j'ai un champ texte avec mon nom d'affiché que je peux modifier, si le service est indisponible, tout champ potentiellement modifiable doit être désactivé avec un message indiquant que toute modification est actuellement impossible.

    En soit, cette logique n'a rien de complexe, la question est : comment la mettre en oeuvre ? Est-ce que cela peut/doit se faire via un WebWorker/ServiceWorker ? Comment s'y prendre ? J'imagine que faire un ping de l'hôte en question à intervalle réguliers reste aléatoire alors comment faire ?

    Quelqu'un a un retour à faire sur le sujet ? Ma question est claire ?
    Exprimer une différence d'opinion vaut mieux que :

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    Est-il possible de créer un iframe caché, dans lequel on charge une même page à intervalle régulier? Si la page est vide, c'est que le service n'est pas disponible...

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    J'imagine que faire un ping de l'hôte en question à intervalle réguliers reste aléatoire alors comment faire ?
    Ce n’est pas si aléatoire que tu le penses, il faut juste admettre que le client aura un certain délai avant de se rendre compte que le serveur est indisponible. Une requête à intervalle régulier est une solution couramment mise en œuvre, on appelle ça du polling.

    L’autre solution est d’établir une connexion persistante entre le client et le serveur, au moyen d’un WebSocket.

    Je déconseille personnellement de recourir à une iframe car elle rend la gestion des erreurs difficiles.

    Edit : l’idéal serait que tu puisses avoir un point d’accès disponible à tout instant, capable de déterminer si le serveur est disponible ou pas. Mais ce n’est peut-être pas possible. Si le seul serveur auquel ton client peut accéder est celui qui est susceptible de faire des timeouts, tu dois ajouter un paramètre timeout sur tes requêtes Ajax.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var req = new XMLHttpRequest();
    …
    req.timeout = 15000; // en millisecondes
    req.addEventListener('timeout', function (ev) {
      alert('La requête a fait un timeout');
    });
    …
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Ce n’est pas si aléatoire que tu le penses, il faut juste admettre que le client aura un certain délai avant de se rendre compte que le serveur est indisponible. Une requête à intervalle régulier est une solution couramment mise en œuvre, on appelle ça du polling.

    L’autre solution est d’établir une connexion persistante entre le client et le serveur, au moyen d’un WebSocket.

    Edit : l’idéal serait que tu puisses avoir un point d’accès disponible à tout instant, capable de déterminer si le serveur est disponible ou pas. Mais ce n’est peut-être pas possible. Si le seul serveur auquel ton client peut accéder est celui qui est susceptible de faire des timeouts, tu dois ajouter un paramètre timeout sur tes requêtes Ajax.
    Oui effectivement, ce n'est pas si aléatoire.

    Sur le JS que tu as fourni, il y a encore des dev qui utilisent du JS pur pour de l'AJAX ? Simple étonnement, rien d'important. Mes appels AJAX ont un callback d'erreur (jQuery) donc ça devrait être bon.

    Je pensais effectivement aux Websockets mais j'avais besoin d'une confirmation, concernant le point d'accès qui détermine si le serveur est toujours OK, je comprends le principe mais je n'ai aucune idée comment l'appliquer.

    Merci.
    Exprimer une différence d'opinion vaut mieux que :

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    il y a encore des dev qui utilisent du JS pur pour de l'AJAX ?
    Oui, et ils sont sans doute plus nombreux que tu ne le penses. XHR niveau 2 jouit d’un support homogène par une vaste majorité des navigateurs modernes, si bien qu’on n’a plus besoin d’une librairie pour combler les lacunes. D’ailleurs, jQuery propose un slim build pour sa version 3.x (plus d’infos (en anglais)) dans lequel il n’y a pas de fonctionnalité Ajax.

    Pour ton callback d’erreur, tu dois vérifier que le second argument est bien "timeout" (voir la doc) pour différencier le timeout d’une éventuelle erreur de réseau.

    Concernant le point d’accès, c’est possible si c’est uniquement ta base de données qui est inaccessible durant la mise en prod. Ton script serveur devrait être en mesure de détecter un problème de connexion à la BDD et faire remonter l’info au client.

    Après, impossible de garantir l’atomicité si la vérification ne se fait pas dans le même script que l’insertion des données envoyées par le client.
    Mais restons pragmatiques, tout mettre dans le même script ne devrait pas être un problème. En clair :
    1. on vérifie que la base est accessible ;
    2a. si oui, on insère et on envoie un message de réussite ;
    2b. si non, on demande à l’utilisateur de réessayer plus tard.

    Je ne sais pas quelle technologie tu utilises côté serveur, mais tu dois avoir moyen de placer un try/catch ou une fonction de gestion d’erreurs sur l’instruction de connexion à ta base de données.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/08/2007, 00h09
  2. Réponses: 4
    Dernier message: 19/07/2007, 13h49
  3. Service windows - Temps de latence lors de l'arrét
    Par Grosbenji dans le forum Windows
    Réponses: 1
    Dernier message: 09/07/2007, 15h10
  4. Réponses: 2
    Dernier message: 07/05/2007, 12h30
  5. VBA Excel - Vérifier la disponibilité internet
    Par pjthedj dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/12/2005, 19h12

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