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 :
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.
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>"; }
Voila le deuxième 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!
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>"; } }
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
Partager