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

Bibliothèques & Frameworks Discussion :

Fonction => Prototype


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Points : 399
    Points
    399
    Par défaut Fonction => Prototype
    Bonjour =)
    Je vient de développer une classe pour faire un Chat en Ajax/sockets php. Un des fonction consiste a lancer un script d'écoute, afin d'afficher les sockets reçu.
    M'étant directement inspiré d'une fonction déjà existante sur le web, j'ai essayé de modifier cette fonction pour utiliser la librairie Protoype, que j'utilise régulièrement. La fonction d'origine ne fonctionnant pas sous IE

    Voici la fonction en question:
    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
    function listen() {
     
    		setScroll();
    		var xhr_object = null;
     
    		if(window.XMLHttpRequest) // Firefox
    		   xhr_object = new XMLHttpRequest();
    		else
    		        {
    		        if(window.ActiveXObject) // Internet Explorer
    		                xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    		        else // XMLHttpRequest non supporté par le navigateur
    		                {
    		                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		                return;
    		                }
    		        }
     
    		var method   = "POST";
    		var filename = "getajax.php";
    		var requete  = "module=chatv&script=listen";
    		var taille = 0; //Le nombre de caractères déjà reçus
    		var update = function()
    		{
    		        if(xhr_object.readyState == 3 && xhr_object.responseText.length > taille)
    		            {
    		            taille = xhr_object.responseText.length;
    		            var reponse = xhr_object.responseText;
    		            $("chatContentReal").innerHTML = reponse;
    		            setScroll();
    		            }
    		    setTimeout(update,1000);
    		};
    		update();
     
    		xhr_object.open(method, filename, true);
     
    		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     
    		xhr_object.send(requete);
     
    	}
    J'ai tenter ceci, mais ce n'est pas très efficace ^^:
    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
    function listen() {
     
    		setScroll();
    		var update = function()
    		{
    			var ajaxRequest = new Ajax.Request('getajax.php',
    			{
    				parameters: {module: 'chatv', script: 'listen'},
    				method: 'post', 
    				onSuccess: function(e)
    				{
    					$("chatContentReal").innerHTML = reponse;
    					setScroll();
    				} 
    			})	
     
    		}
    		update();
     
    	}
    Avec ce code, l'affichage ne se fait que lorsque la fonction est interrompu (fermeture de la fenêtre par exemple) Comment rentrer dans onSuccess (changer onSuccess ? par quoi ?) sans que le script php ne soit terminé ? (vu qu'il tourne en boucle pour écouter le serveur)
    Je ne vois pas trop comment faire :/

    si vous avez une idée

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Ton script php ne s'arrête jamais ? Tu dédies à chaque internaute un thread et un port du serveur pour le chat ?

    Pourquoi ne pas passer par un PeriodicalUpdater ? Surtout qu'il a des fonctions pour augmenter le temps entre de requete si le contenu ne change pas...

  3. #3
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Points : 399
    Points
    399
    Par défaut
    Coté serveur, oui, il y a un thread alloué a chaque client. Mais ca ne nécessite pas énormément de ressource puisque ces script sont en pause jusqu'à réception d'un socket.
    Le script est néanmoins stoppé lorsque le client n'est plus là.

    Et je n'est pas trouvé d'autre moyen qu'une fonction (js) qui regarde périodiquement le résulta affiché par le serveur. Du lu moins pour faire un chat en temps réel.

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par buxbux Voir le message
    Coté serveur, oui, il y a un thread alloué a chaque client.
    Donc si ton apache a 250 threads, avec moins de 250 internautes connectés plus personne ne peut accéder au site.

    Alors que si tu passes par un Ajax.PeriodicalUpdater tu lances une requete regulièrement (ce que tu fais d'ailleurs avec le setTimeout), ca mobilise un thread quelques millisecondes, tu tiens plus d'internautes

    Et en plus tu t'enlèves la contrainte du onSuccess qui ne marche pas sous IE, vu que le flux n'est jamais fermé...

  5. #5
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 186
    Points : 399
    Points
    399
    Par défaut
    Comment mon serveur peut envoyer des sockets a des scripts qui ne tournent pas continuellement dans ce cas? Les personnes qui ont rédigé des tutoriel sur des chats en sockets (je crois qu'il y en a un sur developpez) n'ont pas pris en compte le détail (gros détail) technique dont tu parle ?

    Car, même si j'utilise un Ajax.PeriodicalUpdater, il faut tout de même que le script php "client" tourne en continu pour ne pas rater de threads non ?

    (Comment fonctionne Ajax.PeriodicalUpdater ? ^^)

    Edit: Le tuto sur developpez (je ne me suis pas basé dessus)
    http://stephaneey.developpez.com/tutoriel/php/sockets/

    Edit2: Je vient de regarder en détail le tuto ci-dessus, et je déduis, peut-être a tord, que chaque navigateur ouvre une frame, et donc un threads. Je me trompe ?

Discussions similaires

  1. [Prototype] Fonction keyup : comment faire ?
    Par fefe69 dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 14/09/2009, 17h26
  2. fonction sans prototype ?
    Par info3licen dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/05/2009, 15h48
  3. erreur:une fonction sans prototype ?
    Par info3licen dans le forum Débuter
    Réponses: 1
    Dernier message: 11/05/2009, 14h43
  4. [Prototype] Passage de variables dans fonction
    Par Overstone dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 09/06/2008, 16h52
  5. [Prototype] Fonction constructeur
    Par popy67 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 01/02/2008, 12h31

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