2009-04-07 10 views
2

Je voudrais entendre quelques commentaires sur la façon de gérer des connexions XMPP de longue durée sur un conteneur de servlet, c'est-à-dire sur Tomcat.Gestion des connexions à un serveur XMPP via des servlets

Fondamentalement, nous avons un client qui soumet des identifiants de connexion à une servlet et nous créons une connexion XMPPConnection pour chaque session et la stockons dans HttpSession. Pour simplifier, le client peut effectuer 4 opérations: connexion, envoi/réception de messages, déconnexion. (1) Comme vous pouvez le voir, la durée de vie de XMPPConnection doit être gérée (contrôlée) par le client . Dans notre cas, le HttpSession a un délai d'attente associé. Pensez-vous que le recours à HttpSession est une erreur?

(2) Du point de vue de la récupération de place, est-ce un problème si la session HttpSession est et que nous n'appelons pas spécifiquement XMPPConnection.disconnect()? La façon dont je le comprends, une fois le délai d'expiration atteint, tous les objets dans la portée de la session sont GC'ed. Est-ce que la machine virtuelle aurait rechigné et ignorer la connexion XMPPC s'il était encore connecté?

(3) Quelle est la différence entre un timeout HttpSession et une invalidation? Ma compréhension est que le délai d'attente fait référence à un objet particulier alors que l'invalidation supprime tout.

Répondre

0

(1) Bien qu'il puisse y avoir de meilleurs moyens, je ne vois pas nécessairement un problème de stockage des informations d'identification XMPP dans la session. J'ai récemment fait quelque chose de similaire et compté sur le HttpSession.

(2) Afin de résoudre votre problème de délai, vous avez quelques options. Vous pouvez définir dynamiquement le délai d'attente de la session dans n'importe quel servlet envoie/reçoit des messages (session.setTimeout()), ou vous pouvez en faire une valeur statique dans le fichier web.xml (la valeur -1 signifie pas de délai). Ensuite, vous pouvez créer un SessionListener et appeler XMPPConnection.disconnect() sur sessionDestroyed.

+0

Merci. Bon à savoir que cela a fonctionné pour vous (re: XMPPConnection dans HttpSession). Je vais utiliser un SessionAttributeListener à la place. Il devrait atteindre le même objectif. –

Questions connexes