begin process at 2012 05 28 14:54:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > SIMULER UN SERVEUR COMET (EN PUSH) EN PHP ET JS

SIMULER UN SERVEUR COMET (EN PUSH) EN PHP ET JS


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :push, ajax, comet, iframe, xmlhttprequest Niveau :Initié Date de création :04/06/2010 Date de mise à jour :07/06/2010 18:29:14 Vu / téléchargé :3 517 / 226

Auteur : sebcap26

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Ce script vous permettra de simuler un serveur push en PHP et JavaScript.

Le serveur push a pour but de permettre l'échange d'informations en temps réel avec le serveur, sans que le client doive systématiquement faire une requête auprès du serveur pour obtenir les dernières informations.

Source

  • Voir le fichier joint
Voir le fichier joint

 Conclusion

Pour l'utiliser efficacement, vous devez pouvoir utiliser la fonction PHP set_time_limit sur le serveur.

Pour le moment, le client lance la connection, et le serveur envoie en continu des informations.
En cas de rupture de la connection, celle-ci est relancée automatiquement. Le compteur revient à zéro, mais ce n'est pas un problème dans un cas concret, ou le serveur ne devrait jamais renvoyer les mêmes informations.

Il y a deux fichiers PHP, je sais que c'est pas top étant donné que c'est presque les mêmes, mais vu la taille du code c'était pas la peine de les séparer.

Pour les navigateurs firefox et opera, le XMLHTTPRequest est utilisé. Pour les autres, c'est une iframe.

Attention, sous certains navigateurs il faut quelques secondes pour que ca démarre, je ne sais pas pourquoi.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

04 juin 2010 12:02:27 :
Petite correction de la description (qui portait à confusion)
04 juin 2010 15:24:23 :
Malheureusement, je n'ai pas trouvé de solution pour que le client puisse lui aussi envoyer des données en temps réel sur la même connexion. Il faudra probablement passer par d'autres requêtes pour réussir à faire ca ...
07 juin 2010 18:29:05 :
Nouvelle version (fonctionne avec IE, Opera, Firefox, Chrome et Safari).
07 juin 2010 18:29:14 :
Nouvelle version (fonctionne avec IE, Opera, Firefox, Chrome et Safari).

 Sources du même auteur

DESSINER DES POLYGONES AVEC LA SOURIS

 Sources de la même categorie

Source avec Zip Source avec une capture SLIDESHOW IMAGES ET TEXTES EN PUR JAVASCRIPT par ansuzpeorth
Source avec Zip INPUT TEXT AUTOMATIQUE CREATION SUPPRESSION par lycanges
Source avec Zip Source avec une capture TABLE_SV : TABLEAU DYNAMIQUE, MONTRER/CACHER COLONNE SUR DEM... par synanceia
COLONNES ADAPTABLES EN HAUTEUR par dronoide
Source avec Zip VECTEURS ET MATRICES: OUTILS GRAPHIQUES UTILES par william voirol

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TELECHARGEMENT SANS RECHARGER LA PAGE par zulrigh
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SANS PHP par jdmcreator
Source avec Zip [GAG] GESTION AJAX GÉNÉRALISÉE par bultez
AJAX EN MOINS DE 50 LIGNES par Kimjoa
Source avec Zip Source avec une capture CLASSE AJAX par casper

Commentaires et avis

Commentaire de sebcap26 le 05/06/2010 17:32:50

Je prépare une nouvelle version qui fonctionnera avec tous les navigateurs (mais seuls opera et firefox fonctionnent avec le xmlhttprequest, les autres ont besoin d'utiliser une iframe et sont plus lourds :s).

Je la peaufine un peu et je la mettrais en ligne ensuite.

Commentaire de masternico le 07/06/2010 07:34:07

Salut,
J'ai installé et testé, mais ça ne marche pas. Mozz reste sur 'initialisation en cour'...

Utiliser AJAX pour une connexion persistente n'est pas à recommender. Même si celà peux être tentant, c'est loin d'être efficace (prb de compatibilité entre les navigateurs, etc...). Et puis ce n'est pas prévu pour ça. AJAX, c'est juste pour que le client puisse questionner le serveur, pas pour que le serveur maintienne un flux continue d'info sur un canal.

Si tu veux obtenir un canal en full duplex, c'est à dire que le serveur puisse aussi soliciter le client, et ce même si le client est déjà en train de parler, il faut utiliser les sockets.

Les sockets sont des tunnels que l'on peut ouvrir pour maintenir une connexion avec un serveur. Par contre, tu ne peux ouvrir un socket en JS ni AJAX. Il te faut utiliser d'autres stratagèmes comme java par exemple

Commentaire de sebcap26 le 07/06/2010 09:00:06

J'ai préparé une nouvelle version que je mettrais bientôt en ligne, et pour laquelle tous les navigateurs fonctionnent (ajax pour opera et firefox, iframe pour les autres).

Sinon le but de ma source est justement de pouvoir se passer de Java, de pouvoir le faire nativement avec juste javascript ...

Commentaire de sebcap26 le 07/06/2010 11:28:43

Le problème d'un canal en full duplex, c'est que PHP ne gère pas ca non plus, apparemment PHP n'est appellé par apache qu'une fois les données post reçues ...

Sinon c'est bizzare que ca ne marche pas sur ton mozilla, tu as quelle version ?

Commentaire de Kimjoa le 07/06/2010 13:04:15

salut! J'aime bien ce genre de script , ca change ici ;) ! Par contre c'est un peu simple comme source .... Enfin , quand on a besoin d'un serveur push , par exemple pour un chat ou jeux en ligne multijoueur , on à aussi besoin de variable d'application que l'on peux faire interagir entre les différentes sessions client, sinon je vois pas bien l'intérêt...

C'est vrai que AJAX n'est pas recommandé pour des connections persistante , mais on a pas vraiment le choix les websockets vienne juste de sortir, et si on a pas la main sur apache on peux pas les intégrer...

Il me semble qu'il existe déjà une librairie comme ca, mais incluant les websockets quand c'est possible , mais je la trouve plus :(

Sinon ton script marche pas car tu termine pas ta boucle dans le php

Commentaire de sebcap26 le 07/06/2010 14:20:41

C'est normal que la boucle ne se termine pas, sinon la connexion se ferme :/. C'est justement l'objet de la source.

Après oui, faut encore gérer tout le reste coté serveur. J'envisage de le faire aussi, mais pas sur.

Commentaire de Kimjoa le 07/06/2010 14:25:15

ouais je sais que c'est le but de la source, c'était juste expliquer le "probleme" sur mozilla ....

Commentaire de LeFauve42 le 07/06/2010 15:56:46

J'aurais bien aime jeter un oeil a ton source, mais la presence d'un '+' dans le nom de l'archive empeche d'afficher les fichiers depuis le site....

Si tu fais une nouvelle version, pourrais-tu en profiter pour renommer le .zip ?

Commentaire de masternico le 07/06/2010 16:03:55

Sebcap26>>Le problème d'un canal en full duplex, c'est que PHP ne gère pas ca non plus

Ben justement si. Avec la fonction stream_socket_accept() tu dis à ton script php d'attendre des connexions en socket. Je te mets un lien vers un exemple de coucou47:
http://www.phpcs.com/codes/PROXY-HTTP-SAUVEZ-VOS-VIDEOS-PREFEREES_47616.aspx


Pour ce qui est de mozz, ben j'ai la dernière version. Pero, quand j'utilise AJAX, j'evite d'utiliser le mode asynchrone car moz ne le gère pas super (d'après que...). Donc je me mets toujours en synchrone comme ça je suis sûr que ça marche pour tout le monde...

Commentaire de LeFauve42 le 07/06/2010 17:13:51

> Pour ce qui est de mozz, ben j'ai la dernière version. Pero, quand
> j'utilise AJAX, j'evite d'utiliser le mode asynchrone car moz ne le
> gère pas super (d'après que...). Donc je me mets toujours en synchrone
> comme ça je suis sûr que ça marche pour tout le monde...

J'espere que tu as fait un lapsus, parce qu'utiliser AJAX en synchrone, c'est la porte ouverte a plein de problemes... (et en plus, l'asynchrone fonctionne tres bien sur tous les navigateurs que j'ai teste jusque la (IE 6, 7 et 8, FF 1.5 a 3.6, Chrome 5)).

La plupart des navigateurs sont completement scotches pendent une requete synchrone (plus de refresh de la page, plus de gifs animes, ...).

A part quelques cas tres particuliers, le synchrone est a proscrire ! (et encore, on doit pouvoir s'en passer mais ca simplifie bien la vie dans quelques cas).

Sinon pour faire un stream_socket_accept() dans un script lance par une page PHP, ca doit marcher "a la maison" mais je serai etonne que dans le cas d'un hebergement professionel ca fonctionne (a moins d'avoir un serveur dedie... et encore). En effet, je les imagine mal te laisser ouvrir des ports sur leur serveur (bonjour le trou de securite...).

Eric

Commentaire de sebcap26 le 07/06/2010 18:33:10

Bon, désolé, petit ramage du serveur au moment ou j'ai posté, du coup j'ai posté deux fois la nouvelle version :P.

Sinon l'intérêt de mon script est aussi de pouvoir l'utiliser uniquement avec HTTP. Ca permet de le faire simplement avec juste apache et php, et ca fonctionne aussi derrière un proxy HTTP par exemple.

Sinon le synchrone, y'a la dernière version d'opera qui gère ca remarquablement bien maintenant. Même au niveau des alert, seule l'onglet concerné est bloqué, le reste du navigateur non, c'est vraiment agréable à utiliser (et mieux pour tester aussi quand on veut afficher ses variables avec alert mais qu'on est dans une boucle ^^).

Commentaire de masternico le 08/06/2010 10:32:32

le script fonctionne en fait sur mon mozz, c'est juste que je m'attendais à voir les numéros s'afficher un à un (c'est le but du script) mais en fait il sont apparut tous d'un bloc après que j'ai tué le procéssus qui tournait en boucle infinie. Un truc qui serait pas mal à rajouter à ton script, c'est un bouton 'Stop' qui commanderait au script "serveur" de s'arrêter (sinon, merci le(s) zombi(s))...

=============================================================
>> Sinon l'intérêt de mon script est aussi de pouvoir l'utiliser uniquement avec HTTP
Sauf que si je désactive le javascript dans mon navigateur, ton script ne fonctionnera pas...

=============================================================
>> J'espere que tu as fait un lapsus
Non, malheureusement, je n'ai pas fais de lapsus.

>>c'est la porte ouverte a plein de problemes...
Lesquels?

>> En effet, je les imagine mal te laisser ouvrir des ports sur leur serveur
Tu as raison, ce n'est possible qu'en serveur dédié.

Sinon, pour ce qui est des failles de sécurités, ça dépend... de ton appli. Tu peux laisser tout les numéros de ports passer dans ton parfeu. Si tu n'as pas d'appli qui écoute derrière, c'est sans danger.

===================================================

Je confirme ce que j'ai dit, à savoir que je préfère (pour l'instant) utiliser uniquement le mode synchrone. J'ai eu plusieurs fois le problème avec mozz qui restait en attente de données et ne passait jamais en state 4.
Maintenant, noby's perfect (and my name is nobody... ha ha ha) et je peux très bien me tromper dans l'algorithme d'appel.

Par contre, la chose que j'aime bien avec le mode synchrone, c'est d'être sûr que le serveur m'ai répondu avant le lui envoyer d'autres infos. Disons que si le premier paquet est passé à la trape, et qu'au bout de 15 secondes (variable en fonction de ce que l'on fait) je n'ai toujours pas de signe de vie de mon serveur, alors je renvois la trame.

"Ouah, c'est lourd comme traitement" me direz-vous?
Oui c'est vrais, mais en même temps, c'est comme ça que fonctionne Internet. La fiabilité des informations que l'on envoit et que l'on reçoit tient dans la répétition et l'attente de réponse. Quand on télécharge un fichier, le serveur vous envoit une ou plusieurs trames et attend un "aknowledge' de notre ordi. En l'absence de ce signal, il renvoit le paquet après un temps déterminé par le TTL (time to live). Si au bout de plusieurs paquets répétés il ne reçoit toujours pas de réponse, alors il considère que la connexion est morte et met fin au traitement.

Donc oui, je persiste, je préfère le mode synchrone. Mais libre à vous de choisir le mode que vous voulez... puisque les deux fonctionnent...

Commentaire de Aulios le 01/07/2010 18:23:44

Remplace : " il bous faut donc " par " il vous faut donc ".

sinon moi ça charge depuis 25 minutes sous Internet Explorer et Mozilla

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

AJAX - XMLHttpRequest - il ne veux pas afficher [ par jnbdzjnbdz ] Bonjour je viens de commencer avec ajax. Et je suis déjà entrain de développer une petite application web. Si vous aller ici:<a target="_blank" hr Ajax et IE7 [ par arnaultp ] Bonjour à tous!Je viens de me mettre à l'AJAX, et en reprenant un tutorial j'ai une erreur (voire 2 d'ailleurs) qui apparaît et que je n'arrive pas à Ajax : variable de réponse [ par chapata ] Bonjour à tous,(j'espère avoir posté dans le bon endroit ...)voilà je suis débutant en Ajax, je me suis inspiré des différentes méthodes sur le forum. Rechargement d'objet "AJAX" [ par benjiman2 ] Bonjour !Voila, je commence tout juste a programmer en AJAX ...et voila mon probleme ...Je voudrai que chaque 2 secondes, la page se rafraichisse dans transfert données textarea vers iframe (xmlhttprequest) [ par David_monchy ] Bonjour à tous,En ce moment, je crée un chat, et je suis confronté à un gros problème:j'utilise la méthode xmlhttprequest, pour éviter le "clignotemen Ajax, url et iframes imbriquées. [ par Ahaezod ] Bonjour J'ai sur ma page une iframe dans laquelle se trouve une seconde iframe. Il faut que lorsque ma deuxième iframe soit chargée, un script Ajax s Iframe -> Ajax [ par piep14 ] Bonsoir, j'ai fait une page : http://www.justacote.com/index2.php où l'on peut voir une carte en bas après un chargement excessivement long. Cette car probleme internet explorer et ajax [ par momo11985 ] Bonjour J'ai réaliser une application d'autocompletion en ajax.Cette application marche très bien avec firefox mais ne fonctionne pas sous internet Images dans une iframe actualisée dans AJAX (Firefox) [ par bloom1 ] Bonjour,J'ai fait un tchat en AJAX qui affiche le tchat dans une IFrame ...Le prob... C'est que quand le monde mettent des smileys, ils ne s'affichent Suggestion de recherche avec AJAX [ par darb66 ] Bonjour,Je developpe une fonctionnalite AJAX qui propose une liste de choix a l'utilisateur selon ce qu'il entre dans un champ texte... Du meme style


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,919 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales