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

AJAX Discussion :

Long polling lecture en boucle


Sujet :

AJAX

  1. #1
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut Long polling lecture en boucle
    Bonjour,
    j'ai créé un système de notification avec Ajax, cela fonctionne bien, j'ai utilisé la fonction setTimeout()... Le prob. ce que cela crée un trafic extrêmement important pour mon serveur... Après quelques recherches, j'ai découvert le Server-Push long polling...

    J'ai implémenté un code Lon Polling, mais ça réaction n'est pas celui attendu... Ça répète un même message à chaque x seconde déterminé... Or selon mes recherches, ça ne devrai afficher un nouveau message uniquement s'il y a une modification dans le serveur (BDD)...

    Mon code doit afficher une série d’information entré par plusieurs utilisateurs, mais tout cela sur une page.

    Voilà un peut ce que j'ai fait:
    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
     
          <script type='text/javascript'>
            $(document).ready(function() {
                getData();
            });
     
            function getData() {
                $.ajax({
                    type: "POST",
                    url: "view/all-views/show_all.php",
                    async: true,
                    timeout: 50000,
                    data: "get=true",
                    success: function(data) {
                        $("#response").append(data);
     
                        setTimeout("getData()", 5000);
                    }
                });
            }
        </script>
    Merci...

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    Ça répète un même message à chaque x seconde déterminé... Or selon mes recherches, ça ne devrai afficher un nouveau message uniquement s'il y a une modification dans le serveur (BDD)...
    dans ce que tu montre c'est le client qui fait la requête donc c'est du "long polling JS" et non Serveur.

    Dans ton cas, ce que tu pourrais tester c'est si le message à déjà fait l'objet d'un envoi en faisant une vérification sur la date/heure.

  3. #3
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut
    Citation Envoyé par NoSmoking Voir le message

    Dans ton cas, ce que tu pourrais tester c'est si le message à déjà fait l'objet d'un envoi en faisant une vérification sur la date/heure.
    Merci, ta réponse m'a orienté encore mieux...

    J'ai trouvé l'exemple suivant qui consiste à lire un fichier tex, et afficher le contenu à chaque modification... d'afficher le resultat de ma bdd, ça ne marche pas, même pas un signe de vie.

    Voilà un peut le code:
    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
     
    $dataFileName = '../../view/rsult/data_bdd.txt'; 
    	while ( true )
    	{
    	    $requestedTimestamp = isset( $_GET['timestamp'] ) ? (int)$_GET['timestamp'] : null;      
     
    	    // o PHP faz cache de operações "stat" do filesystem. Por isso, devemos limpar esse cache   
    	    clearstatcache();  
     
    	    $modifiedAt = filemtime( $dataFileName );       
     
    	    if ( $requestedTimestamp == null || $modifiedAt > $requestedTimestamp )
    	    {
    	        $data = file_get_contents( $dataFileName );
     
    	        $arrData = array(
    	            'content' => $data,
    	            'timestamp' => $modifiedAt
    	        );
     
    	        $json = json_encode( $arrData );
     
    	        echo $json;
     
    	        break;
    	    }
    	    else
    	    {
    	        sleep( 2 );
    	        continue;
    	    }

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Le principe reste le même.

    En préalable il te faut stocker un champs de type DATETIME pour chaque "post".

    Tu interroges la BdD pour savoir si il y a un/des post(s) récent(s) par rapport à la date/heure de la demande
    • SI OUI tu envoies les news
    • SI NON tu refais la demande au bout d'un temps raisonnable

  5. #5
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut
    Oui, je l'ai fait...
    Avec FireBug 2.0.11 je voie bien une connexion (canal) en attente, mais après elle s'arrête...
    Le canal reste à l'écoute si je donne mon fecht_bd la valeur null, (fecht_bd = null)...

    Et donc par là ça donne du n'importe quoi...
    Voilà un peut mes modifications Serveur et Client

    Code serveur
    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
     
    # = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
    		# SELECT MySQL - http_PUSH  | Show page content
    	set_time_limit(0);
    	$fecht_ac = isset($_POST['timestamp']) ? $_POST['timestamp']:0;
    	$fecht_bd = $ar['timestamp'];
     
    	while ($fecht_bd <= $fecht_ac) {
    		# code...
    		$query_SQL_tmp = 'SELECT timestamp FROM mensajes ORDER BY timestamp DESC LIMIT 1';
    		$show_STM_tmp = $bdd->prepare($query_SQL_tmp);
    		$show_STM_tmp->execute() or die(print_r($show_STM_tmp->errorInfo()));
    		$numComentarions = $show_STM_tmp->rowCount(); # numero de comentarios
    		$rs = $show_STM_tmp->fetch();	
     
    		usleep(10000);
    		clearstatcache();
    		$fecht_bd = strtotime($rs['timestamp']);		
    	}
    	$query_SQL = 'SELECT * FROM mensajes ORDER BY timestamp DESC LIMIT 1';
    	$show_STM = $bdd->prepare($query_SQL);
    	$show_STM->execute() or die(print_r($show_STM->errorInfo()));
    	$numComentarions = $show_STM->rowCount(); # numero de comentarios
    	// $comentarioResult = $comentStm->fetch();	
    	while ($row = $show_STM->fetch()) {
    		# code... 
    		//echo "Sou millionario em $US";
    		$ar['timestamp'] = $row['timestamp'];
    		$ar['mensaj']    = $row['mensaj'];
    		$ar['id']        = $row['id'];
    		$ar['nt']		 = $row['nt'];
    	}
    $data_json = json_encode($row);
    echo $data_json;
    Code client
    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
     
    <script type="text/javascript">
    		var timestamp = null;
    		function cargar_push () {
    			// body...
    			$.ajax({
    				async: true,
    				type: "POST",
    				url: "http_push.php",
    				data: "&timestamp="+timestamp,
    				dataType: "html",
    				success: function(data){
    					var json   = eval("(" + data + ")");
    					timestamp  = json.timestamp;
    					mensaj     = json.mensaj;
    					nt         = json.nt;
     
    					if (timestamp == null) {
     
    					}else{
    						$.ajax({
    							async: true,
    							type: "POST",
    							url: "mensajes.php",
    							data:"",
    							dataType: "html",
    							success: function(data){
    								$('#contenido').html(data);
    							}
    						});
    					}
    					setTimeout(cargar_push(), 1000);
    				}
    			});
    		}
    		$(document).ready(function(){
    			cargar_push();
    		});
    	</script>

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Je voyais plutôt quelque chose dans cet esprit coté serveur
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $requete = 'SELECT * FROM message WHERE message_date >= date_connect');
    do {
      $result = $base-> query($requete);
      $count = $result->rowCount();
      if( $count){
        // mise en forme résultat
        $buffer = '';
      }
      else{
        sleep(5); // par exemple
      }  
    } while( $count);
    echo $buffer;
    en gérant bien sûr la date_connect.

  7. #7
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut
    En m'inspirant de ton code j'ai développé le suivant,
    ça marche, ça m'afficher les résultats, mais de manière normal, il faut actualiser pour afficher les nouveau champs entré dans la base...

    La connexion ne reste pas ouvert ça semble compliquer...

    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
     
    $requestedTimestamp = isset( $_GET['timestamp'] ) ? (int)$_GET['timestamp'] : time();
    $stmt = $bdd->prepare('SELECT * FROM messages WHERE timestamp_date > timestamp_date');
     
    while (true){
    	$stmt->execute();
    	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    	$rows_count = $stmt->rowCount();
     
    	if ($rows_count > 0 )
    	{
    	    echo json_encode( $rows );
    	    break;
    	}
    	else
    	{
    	    sleep( 5 );
    	    continue;
    	}
    }

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    • As tu bien enlevé le timeout: 50000 que tu avais au départ sur ta fonction Ajax ?

    timestamp_date > timestamp_date erreur copier/coller ?

    • Je n'aurais pas géré la date/time de connection comme cela mais en passant pas une variable de SESSION mise à jour lors de l'envoi, un peu dans cet esprit...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    header('Content-type: text/HTML; charset=UTF-8');
    session_name ('test_connection');
    session_start();
    if( !isset($_SESSION['derniere_connection'])){
      $mess = "Connection réussie !";
    }
    else {
      $mess = "dernière connection le " . date("d-m-Y  H:i:s", $_SESSION['derniere_connection']);
    }
    // sauvegarde dernière connection
    $_SESSION['derniere_connection'] = time();
    // envoi résultat
    echo $mess;
    ?>
    ...donc pas de passage de paramètre, tout ce passe sur le serveur.

    • Peut être trouveras tu une meilleure aide sur le forum PHP !

  9. #9
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    ]...donc pas de passage de paramètre, tout ce passe sur le serveur.

    • Peut être trouveras tu une meilleure aide sur le forum PHP !
    Merci NoSmoking,
    J'ai suivi ta suggestion, je suis allé dans le forum de PHP, mais personne n'a répondu... Mais j'ai pu lire les idée théoriques sur le Long Polling et j'ae appris que c'est une technologie ancienne, alors je me suis incliné par une plus récente, le SSE pour (Server-Sent Event - HTML5), j'ai résolu mon problème, peut être pas avec la plus optimal des solutions, mais ça marche, trouver le code dans les lignes qui suivent:

    Mais avant de lire mon code, j'aimerai quand même mentionner mes réfférences, pour ceux qui viendrons après moi
    - Mozila Firefox, w3schools et enfin moi même...

    Code Client:
    Très simple avec des événements JavaScript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <script>
    if(typeof(EventSource) !== "undefined") {
        var source = new EventSource("demo_sse.php");
        source.onmessage = function(event) {
            document.getElementById("result").innerHTML += event.data + "<br>";
        };
    } else {
        document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
    }
    </script>
    Cide Server avec langage PHP:
    [!] Il y a de lignes inutis, telle que la date dans mon boucle While, à effacer,
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <?php
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');
     
    date_default_timezone_set("America/New_York");
    header("Content-Type: text/event-stream\n\n");
     
    try{
    	$bdd = new PDO('mysql:host=localhost;dbname=secure-keepIN', 'root', 'Senda2015');
    }catch (Exception $e){
        die('Erreur : ' . $e->getMessage());
    }
     
    $requestedTimestamp = isset( $_GET['timestamp'] ) ? (int)$_GET['timestamp'] : time();
    $stmt = $bdd->prepare('SELECT * FROM keep_inComentVideo ORDER BY id DESC limit 2');
    	$stmt->execute();
    	$rows = $stmt->fetch(PDO::FETCH_ASSOC);
    	$rouw_counter = $stmt->rowCount();
     
    	$timestamp = $rows['timStamp'];
    	$valor     = $rows['comentario'];
     
     
    $counter = rand(1, 2);
     
    while (1) {
      // Chaque seconde envoie d'un evenement de type "ping"
      # LASTE - DATA BASE INFORMATUION
     
    	# NEW - DATA BASE INFORMATUION
    	$stmt_new = $bdd->prepare('SELECT * FROM keep_message ORDER BY id DESC limit 1');
    	$stmt_new->execute();
    	$rows_new = $stmt_new->fetch(PDO::FETCH_ASSOC);
    	$rouw_counter_new = $stmt_new->rowCount();
     
    	$timestamp_new = $rows_new['timStamp'];
    	$valor_new     = $rows_new['comentario'];
     
     
      echo "event: ping\n";
      $curDate = date('D M Y | H: m ');
      echo 'data: {"time": "' . $curDate . '"}';
      // Paire de nouvelle ligne
      echo "\n\n";
     
      // Send a simple message at random intervals.
     
      $counter--;
     
      if ($timestamp_new > $timestamp) {
      	# LASTE - DATA BASE INFORMATUION
    	//$stmt = $bdd->prepare('SELECT * FROM keep_message ORDER BY id DESC limit 1');
    	//$stmt->execute();
    	//$rows = $stmt->fetch(PDO::FETCH_ASSOC);
    	//$rouw_counter = $stmt->rowCount();
     
    	$timestamp = $rows['timStamp'];
    	//$valor_new     = $rows['comentario'];
     
        echo 'data: This is a message at time - ' . $valor_new . "\n\n";	
        $counter = rand(1, 2);
        break;
      }
     
      ob_flush();
      flush();
      sleep(1);
    }
    ?>
    Si le chant est du type textarea, je conseil d'utiliser le formatage <pre>, sinon ça ne va récupérer que la la première ligne.

    Vraiment très simple

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    J'ai suivi ta suggestion, je suis allé dans le forum de PHP, mais personne n'a répondu...
    il ne faut pas être impatient, les vacances sont là également et les sujets n'inspirent pas toujours quelqu’un de présent au moment où l'on en a besoin.


    Mais j'ai pu lire les idée théoriques sur le Long Polling et j'ae appris que c'est une technologie ancienne...
    pas plus que la techno Ajax et elle a encore de beau jour devant elle car de plus, actuellement, elle est compatible avec tous les navigateurs ce qui n'est pas le cas de Server-Sent Even.

    Sinon dans le genre il y a également les webSocket, node.js...
    Par exemple :


    Si le chant est du type textarea, je conseil d'utiliser le formatage <pre>, sinon ça ne va récupérer que la la première ligne.
    il existe la fonction PHP nl2br().

    Merci pour ce retour complet.

    Nota : je reste persuadé que la date de connexion doit se gérer coté serveur .

  11. #11
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut
    Citation Envoyé par NoSmoking Voir le message

    il existe la fonction PHP nl2br().

    Merci pour ce retour complet.

    Nota : je reste persuadé que la date de connexion doit se gérer coté serveur .
    Ah oui, les vacances sont encore là ... Merci pour le liens et pour la fonction nl2br de PHP, je ne la connaissais pas, j'utilisais toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo('<pre>'); echo('</pre>');
    Un jour peut être je retournerai avec le Long polling... Et pour le Node.js, dans mes recherche j'ai découvert que pour l'utiliser il me faudra un serveur dédié , ce pourquoi je ne me suis pas plongé au fond...

    Merci encore NoSmoking, t'est bon modérateur

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Oui c'est vrai que c'est plus simple mais SSE n'est pas compatible avec Internet Explorer même les versions récentes.

    Il existe cependant des lib qui permettent d'émuler SSE avec IE et les anciens navigateurs. Par exemple ici (j'ai pas testé). Mais du coup cela devient un peu moins simple...

    Une autre solution si on se contente de la compatibilité avec IE 10 et IE 11.

  13. #13
    Membre actif
    Homme Profil pro
    Recherches en Informatique
    Inscrit en
    Juillet 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Recherches en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 60
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Mais du coup cela devient un peu moins simple...

    Une autre solution si on se contente de la compatibilité avec IE 10 et IE 11.
    Woow! Sacré code a analyser... Ce vrai quand même Long Polling semble plus facile lors d'utilisation de JSON...
    Mais personnellement j'aime pas IE de toute ces genres et version je n'ai pas de choix que donner support de version 10 à 11

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par Francisco22 Voir le message
    ...je n'ai pas de choix que donner support de version 10 à 11
    Oui c'est le minimum d'être compatible au moins IE10 sinon tu exclurais trop de visiteurs

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

Discussions similaires

  1. [FLASH 8] Lecture en boucle d'un clip particulier
    Par Yann04 dans le forum Flash
    Réponses: 1
    Dernier message: 27/02/2007, 07h19
  2. Lecture fichier, boucle et concaténation
    Par yabbiyou dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/02/2007, 19h31
  3. [vb6] Lecture en boucle via port COM
    Par Original Prankster dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/10/2006, 21h34
  4. Problème de lecture en boucle
    Par masseur dans le forum Flash
    Réponses: 3
    Dernier message: 17/10/2006, 15h14
  5. lecture en boucle sous firefox
    Par ptichat dans le forum Flash
    Réponses: 4
    Dernier message: 19/06/2006, 10h34

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