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

Web Perl Discussion :

Temps réel et CGI


Sujet :

Web Perl

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 21
    Par défaut Temps réel et CGI
    Bonjour à tous,

    Je cherche à afficher en temps réel des données dans une page web .

    Voila actuellement le fonctionnement du dispositif :
    Un script CGI s'occupe de lancer un programme en C qui réalise une acquisition et effectue certains calculs. Le programme en C traite ces données et fournit chaque seconde des résultats. J'essaie de trouver un moyen de les afficher via la page web créée par un script CGI. Les résultats transitent entre le programme d'acquisition et le script via une FIFO.

    Je rencontre quelques problèmes pour réaliser l'affichage en temps réel de données acquises. J'ai réalisé deux scripts CGI de test afin d'illustrer le problème:

    Voici le premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #!/usr/bin/perl -w
     
    use CGI::Carp qw(fatalsToBrowser);
    use CGI qw(param :standard);
     
    #
    # Récupération des données
    #
    $parametres{"duree_acq"}=param("duree_acq");
    $parametres{"nom_projet"}=param("nom_projet");
    $parametres{"device"}=param("device");
     
    #
    # Création de la page internet
    #
     
    print header();
    print start_html("Test affichage temps réel");
     
    for($i=0;$i<$parametres{duree_acq}*3;$i++)
    {
            sleep 1; # simule un processus
            print "<script langage=\"JavaScript\">
            alert(\"$i\"); </script>";
    }
    problème de ce premier script : les pop-up ne s'affichent pas en temps réel mais apparaissent toutes en même temps à la fin du script.

    Voila le deuxième script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #!/usr/bin/perl -w
     
    use CGI::Carp qw(fatalsToBrowser);
    use CGI qw(param :standard);
     
    #
    # Récupération des données
    #
    $parametres{"duree_acq"}=param("duree_acq");
    $parametres{"nom_projet"}=param("nom_projet");
    $parametres{"device"}=param("device");
     
    #
    # Création de la page internet
    #
     
    print header();
    print start_html("Test affichage temps réel");
     
    for($i=0;$i<$parametres{duree_acq}*3;$i++)
    {
            if(!defined($child_pid=fork()))
            {
                    die "cannot fork :$!";
            }
            elsif($child_pid)
            {
                    # Père
                    waitpid($child_pid,0);
            }
            else
            {
                    # Fils
                    sleep 1; # simule un processus
                    print "<script langage=\"JavaScript\">
                    alert(\"$i\"); </script>";
            }
    }
    Avec ce second script, les pop-up apparaissent bien toutes les secondes mais le problème ici est qu'ils continuent à apparaître indéfiniment!

    Visiblement je m'y prends mal mais je ne vois pas comment procéder autrement. Quelle est la méthode classique (si elle existe) pour traiter ce genre de problème ?

    Merci d'avance.

    BV

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Ecrire au fur et à mesure comme tu essaies de le faire pose pratiquement toujours des problèmes de compatibilités entre browser, certains attendront pour faire l'affichage, il y a des moyens pour éviter ça, mais pas universels.

    Je te conseillerais bien d'utiliser Ajax avec CGI::Ajax par exemple pour gérer ça.

    Si tu ne veux pas te lancer là-dedans (mais ça t'ouvrira pas mal de possibilités en général), essaie déjà de mettre "$|++;" sur une ligne au début de ton premier script et de voir ce que ça donne sur quelques navigateurs.

    --
    Jedaï

  3. #3
    Membre averti
    Inscrit en
    Février 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 21
    Par défaut
    Bonjour,

    Merci beaucoup pour la réponse , j'ai utilisé la solution consistant à ajouter "$|++;" et cela fonctionne bien avec Iceweasel et Konqueror.

    @+

    BV

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour en temps réel de la base de données
    Par Clotilde dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/06/2004, 22h09
  2. [MFC] graphique temps réel
    Par _Thomas_ dans le forum MFC
    Réponses: 10
    Dernier message: 01/06/2004, 11h56
  3. Voir requête éxécuté en temps réel ?
    Par [DreaMs] dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/01/2004, 14h52
  4. cubes temps réel en ROLAP
    Par Guizz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/07/2003, 16h36
  5. Durée d'un traitement temps réel
    Par Almex dans le forum C
    Réponses: 5
    Dernier message: 29/03/2003, 14h15

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