Question

I''m tripotant actuellement avec une application qui a une configuration correspondant à l'analogie dans le chat suivant:

  • un chat en direct est un objet qui est conservé en mémoire et contient une liste de discussion messages
  • une conversation est rendu dans plusieurs fenêtres du navigateur et mises à jour tiré avec a4j: appuyez sur

La configuration programmatique ressemble à ceci: une instance d'un objet de discussion avec ses messages est partagé entre le composant de couture PAGE scope dans différentes sessions. Maintenant, quand tous les messages de session un nouveau message, à savoir modifie l'objet de discussion, tous les composants de couture doivent être informés du nouveau message afin que le nouvel Etat peut être relayée à l'interface utilisateur sur tous les clients.

Je peux penser à trois façons d'y parvenir:

  1. événements de Seam avec l'ID de chat comme paramètre et chaque composant vérifie l'ID et soit mises à jour ou ignore le message
  2. JMS ou Queues un sujet JMS où chaque composant listenes sur un filtre pour seulement il est le chat
  3. un mécanisme d'écoute pur Java dans l'objet de la discussion commune, à savoir chacun des registres d'éléments de couture pour elle et la notification est java pur et direct

Par souci d'argument supposons que le nombre de causerie est grande (des dizaines de milliers) et le nombre d'utilisateurs de chat est petite (disons 2-10).

Comment sage chaque performance à grande échelle? Avez-vous d'autres suggestions comment faire cela avec Seam et qui fonctionne bien?

Comme je le vois, (1) seraient intégrés et propres, mais finalement vous auriez avisez des dizaines de milliers de composants où seulement quelques réellement besoin. Donc, il ne sera probablement pas l'échelle.

(2) seraient intégrés et ne dépendent que de la performance du fournisseur JMS (qui peut être échangé) et fonctionne également dans un environnement en cluster sans modifications. Je ne suis pas sûr de la performance de JMS ici, à savoir sont quelques centaines de messages par seconde et milliers d'auditeurs avec différents filtres bien ou non?

(3) serait rapide, car seuls les composants nécessaires seraient avisés et la notification est java pure et directe. , Les problèmes concurrency / d'accès peuvent toutefois se produire parce que plusieurs sessions quelque chose / composante / fil est fait.

A (1) et (3) une solution qui prend en charge le regroupement devrait être ajouté manuellement, si nécessaire à un moment donné.

Était-ce utile?

La solution

Je vous recommande 2). Je recommande également la coupe JMS de l'équation - même si elle vous permettra de changer de fournisseur de messagerie il fera aussi vous empêcher d'utiliser les fonctionnalités plus avancées de votre système de messagerie. Si vous utilisez une base de données Oracle AQ ferait un choix judicieux (il prend en charge JMS btw.). Sinon, je vous recommande d'utiliser AMQP qui devrait être disponible par le biais JBoss Messaging ou une solution tierce comme RabbitMQ .

Puisque vous avez clairement un problème de messagerie, vous devez opter pour l'utilisation d'une solution de messagerie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top