Socket client/serveur.
Le
Jean-Christophe
Bonjour,
Je développe un serveur http avec les sockets windows,
et voudrais qu'aprés une première connection d'un browser
client au serveur (et réponse du serveur par l'envoi
d'une page html complète) le serveur puisse à sa propre
initiative rafraichir la page du browser client.
Pour etre plus clair, voici le topo :
1: Le browser client envoie sa requète au serveur
( http://serveur/ )
2: Le serveur répond en retournant une page html.
3: Lors d'un évènement nécéssitant une mise à jour,
le serveur renvoie au client une autre page html.
J'ai commencé par inclure dans l'en-tete html un auto-reload:
<meta http-equiv="refresh" content="10; URL=http://server/">
ca marche mais le problème est que ce n'est pas le serveur
lui-meme qui décide quand la page doit etre rafraichie.
Pour l'instant j'ai trouvé le truc suivant :
aprés envoi de la page html le serveur laisse
ouverte la socket et, lorque c'est nécéssaire,
envoie au browser la commande JavaScript:
window.location.replace("http://server/");
puis ferme la socket. Le browser client recontacte alors le
serveur comme si l'utilisateur avait lui-meme rafraichi la page.
Ca marche, mais coté serveur la socket doit rester ouverte,
et coté browser celui-ci peut tomber en time-out
Il faudrait quelque chose de plus efficace.
Existe-t'il un moyen de renvoyer une page html
vers le browser client, en remplacant l'ancienne page ?
Je développe un serveur http avec les sockets windows,
et voudrais qu'aprés une première connection d'un browser
client au serveur (et réponse du serveur par l'envoi
d'une page html complète) le serveur puisse à sa propre
initiative rafraichir la page du browser client.
Pour etre plus clair, voici le topo :
1: Le browser client envoie sa requète au serveur
( http://serveur/ )
2: Le serveur répond en retournant une page html.
3: Lors d'un évènement nécéssitant une mise à jour,
le serveur renvoie au client une autre page html.
J'ai commencé par inclure dans l'en-tete html un auto-reload:
<meta http-equiv="refresh" content="10; URL=http://server/">
ca marche mais le problème est que ce n'est pas le serveur
lui-meme qui décide quand la page doit etre rafraichie.
Pour l'instant j'ai trouvé le truc suivant :
aprés envoi de la page html le serveur laisse
ouverte la socket et, lorque c'est nécéssaire,
envoie au browser la commande JavaScript:
window.location.replace("http://server/");
puis ferme la socket. Le browser client recontacte alors le
serveur comme si l'utilisateur avait lui-meme rafraichi la page.
Ca marche, mais coté serveur la socket doit rester ouverte,
et coté browser celui-ci peut tomber en time-out
Il faudrait quelque chose de plus efficace.
Existe-t'il un moyen de renvoyer une page html
vers le browser client, en remplacant l'ancienne page ?

Poser une question


écrit :
Toutes mes condoléances.
Le HTTP ne le permet pas.
On peut faire vaguement ça avec de l'AJAX et du COMET (où le browser envoie
une requête et le serveur tarde à y répondre), mais c'est gore.
Pourtant j'y arrive en laissant la socket ouverte
et en envoyant un window.location.replace()
et le tout fonctionne correctement sous IE et FireFox.
Mais ce qui me gène est la contrainte
de laisser la socket ouverte coté serveur.
Hélas je n'ai que winsock à ma disposition.
J'ai vu des sites ou des infos sur la page html client sont
mises à jour à l'initiative du serveur, comme par exemple
permettre aux connectés de discuter dans une fenètre :
est-il vraiment impossible d'implémenter
cela sous http juste avec winsock ?
Ou peut-etre peux-tu me rediriger vers
un newsgroup plus adéquat sur ce sujet ?
Jean-Christophe a écrit :
Voir du côté des fr.comp.infosystemes.www.*.
Le 29/11/2010 14:45, Jean-Christophe a écrit :
Cela revient à ce qu'écrivait Nicolas :
Je suis du même avis : tarder à « r pondre » à la « requ te », c'est gore.
Ét cêt ïmbéçîlë dë Gôôglë grôüpës qùî vîrë lès lèttrës âvèç äcçënts
ç'èst gôrë àùssï.
Cordialement,
--
Olivier Miakinen
J'irai plus loin et je retirerais des voyelles pour ne pas
prendre trop de bande passante :
--
Benoît http://www.duvallois.com/
Avec des fumeurs c'est difficile de s'arrêter. Avec des branleurs,
là, par contre, c'est difficile de continuer.