2010-02-24 11 views
2

Je voudrais savoir s'il est possible de détecter facilement (sur le côté serveur) lorsque les clients Flex déconnecter d'une destination BlazeDS s'il vous plaît? Mon scénario est simplement que je voudrais essayer et utiliser cela pour déterminer combien de temps chacun de mes clients sont connectés pour chaque session. Je dois aussi pouvoir différencier les clients (c'est-à-dire ne pas compter seulement le nombre de clients actuellement connectés que je vois dans ds-console). Alors que je pourrais programmer dans un processus "Je me déconnecte maintenant" chez mes clients, je ne sais pas si cela se déclenchera si le client navigue simplement vers une autre page web plutôt que de suivre le processus de déconnexion.Detecting (sur le côté serveur) lorsqu'un client Flex se déconnecte de BlazeDS destination

Quelqu'un peut-il suggérer s'il y a un moyen facile de faire ce type de contrôle sur le côté serveur s'il vous plaît.

Un grand merci, Alex

Répondre

0

La seule façon de le faire est de mettre en œuvre le droit mécanisme de pulsation d'une manière ou d'une autre. Vous pouvez utiliser le keep-alive de http couplé avec la session expire comme suggéré auparavant mais mon opinion est d'utiliser le mécanisme de messagerie de BlazeDS (envoyer un message à X secondes). Vous pouvez contrôler l'intervalle de temps et d'autres aspects (peut-être que vous voulez détecter si le client ne fait rien pendant plusieurs heures et invalider la session même si votre client est toujours connecté). Si vous voulez être averti instantanément (application de chat) lorsqu'un client se déconnecte une solution est d'avoir une socket (RTMP) ou une émulation (http streaming) qui détectera instantanément si le client est déconnecté, mais cette déconnexion peut être temporaire (peut-être que le réseau était en panne pendant une seconde, et après cela est ok, et vous devriez également le détecter).

+0

Merci à vous deux Herms et Cornel. Une sorte de battement de cœur était ce que je pensais devoir faire (et je pense qu'il devrait être facile d'avoir une destination "heartbeat" pour les clients connectés). Je pensais juste qu'il pourrait y avoir quelque chose de construit dans BlazeDS pour cela (je ne l'ai pas encore trouvé). Je vais planifier pour un battement de coeur. Encore une fois – AlexC

0

Je suppose BlazeDS fourniraient un rappel ou un événement pour quand un client se déconnecte, mais je n'ai pas travaillé avec Blaze pour que serait juste une supposition. La première étape serait de vérifier la documentation pour voir si c'est le cas, car ce serait votre meilleur pari.

Ce que je l'ai fait dans les cas où il n'y a pas un événement de déconnexion (ou il est pas fiable) est d'ajouter un message keepalive. Par exemple, le client serait configuré pour envoyer un message keepalive toutes les 30 secondes, et si le serveur va plus que, disons, 2 minutes sans voir un keepalive, alors il suppose que le client s'est déconnecté. Cela vous permet de différencier les différents clients, et vous pouvez jouer avec le taux et vérifier les heures pour obtenir quelque chose que vous êtes heureux.

1

Mettre en œuvre vous-même adaptateur extension "étend ServiceAdapter"

, réglez la fonction:

@Override Les handlesSubscriptions booléennes (public) { de return true; } Ainsi, vous pouvez gérer l'abonnement et désabonnement

Ensuite, vous pouvez gérer ceux de la fonction de gestion:

@Override objet Manage (CommandMessage CommandMessage) {

publique

interrupteur (commandMessage.getOperation()) { cas CommandMessage.SUBSCRIBE_OPERATION: rupture; case CommandMessage.UNSUBSCRIBE_OPERATION: pause; }

}

Vous pouvez également prendre différentes commandes.

Espérons que cette aide