Est-il possible côté serveur d'alerter un widget côté client qu'il doit se rafraichir ?
Je me trouve face à se problème pour faire un chat et je voudrai que la zone de discussion se rafraichisse quand une autre personne a envoyé un msg.
Merci
Est-il possible côté serveur d'alerter un widget côté client qu'il doit se rafraichir ?
Je me trouve face à se problème pour faire un chat et je voudrai que la zone de discussion se rafraichisse quand une autre personne a envoyé un msg.
Merci
Bonjour,
Je pense que tu peux utiliser des contrôleurs côté serveur.
En gros, le contrôleur connaît est un singleton qui connaît toutes les utilisateurs connectés, comme ceci, tu reçois un message sur ton serveur qui doit aller d'un utilisateur X à un utilisateur Y. Le contrôleur récupère le message de X et peut avertir Y en déclenchant un rafraîchissement.
Bonjour,
merci pour ta réponse, tu as bien résumé ce que je cherche à faire.
Mais donc je ne sais pas comment faire une alerte pour déclencher un rafraichissement.
Tout les tutos que je trouve avec le design pattern MVC, les trois couches sont du côté client. Pour les échanges client-serveur, tout ce que je sais faire se sont les services qui sont appelés côté client.
merci
En fait tu peux faire, un contrôleur côté serveur qui connaît tous les clients.
Et un contrôleur pour chaque client qui connaît tous les éléments graphiques du client.
Ainsi, tu n'as pas de mélange entre client et serveur.
Le contrôleur client X appelle le contrôleur serveur qui appelle le contrôleur client Y.
Je pose mal ma question.
J'ai bien compris comment organiser mon code, seulement je ne connais pas les moyens disponibles pour arriver à mes fins.
Ce que je cherche, ce sont les classes/méthodes dans gwt ou autre qui vont me permettre de déclencher une alerte depuis le serveur pour prévenir le client.
Tu peut utiliser un Timer coté client pour scruter le serveur afin de récupérer les messages en attente.
Cote serveur tu stock les messages en attente dans une liste que tu vide à chaque fois que le client les récupère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 com.google.gwt.user.client.Timer t = new com.google.gwt.user.client.Timer () { public void run() { recuperer les messages en attente via un appel rpc } }; t.schedule(15000);//tout les 15 secondes
A noter que cote serveur tu dois aussi garder la liste des sessions ouvertes(les clients connectes), en utilisant le sessionlistener.
Est-ce vraiment "propre" de faire comme ça ?
J'ai cru comprendre qu'on ne pouvait faire de socket en javascript donc ni avec gwt.
N'y a-t-il pas de moyen détourné simple pour en utiliser ?
15 sec ça me parait long pour le rafraichissement d'un chat "live" genre messagerie instantanée. Quel sont les ordres de grandeur pour avoir des rafraichissement plus fréquent sans saturer le serveur ?
Merci
Tu es obligé d'utiliser un timer pour scruter le serveur, il n'y a pas d'autres solutions (sans plugin).
Ensuite, pour le temps de rafraichissement, ça dépend principalement de ton serveur, il n'y a pas de réponse dans l'absolu.
Ton problème se résume à faire du "push", c'est à dire que les données sont poussées du serveur vers le client.
Or actuellement, en http, c'est toujours le client qui est à initiative de la connexion.
1) La première façon est donc que le client s'informe à intervalles réguliers auprès du serveur (objectif du code présenté par moonair). L'inconvénient est que si le pas temporel est trop grand, on perd en réactivité et s'il est trop court, on maximise le trafic en faisant pleins de requêtes inutiles.
Les seules autres alternatives sont :
2) Utiliser une techno qui permet de gérer des sockets (flash, applet, ...)
3) Attendre HTML 5 et ses websockets
4) Utiliser Comet : L'idée est de maintenir une connexion http ouverte afin que le serveur puisse faire son push. Le bouquin "GWT in Practice" en parle.
Voir aussi : http://weblogs.java.net/blog/jfarcan...T_BOF-4922.pdf
Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
La meilleure façon de prédire l'avenir, c'est de l'inventer.
Je ne connaissais pas Comet, et ça a l'air vraiment pratique (je suis bon pour recoder une partie de mes applis :-/ ), en particulier ce projet :
http://code.google.com/p/rocket-gwt/wiki/Comet
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager