2014-07-13 2 views
0

Je crée des acteurs WebSocket dans Play (Scala).Jouer le cadre de stockage des acteurs Akka dans les collections

Les acteurs sont créés ailleurs dans le système et il me suffit de les conserver en un seul endroit, regroupés par certaines variables.

Quelle est la meilleure pratique pour les stocker, et que l'on prend la plus petite quantité de mémoire:

  • Seq [Acteur]
  • Seq [ActorRef]
  • Quelque chose d'autre?

Répondre

2

Vous devriez JAMAIS acteurs de magasin - le seul moyen d'accéder à l'acteur devrait être par la ActorRef

Il y a quelques modèles/pratiques que vous pouvez utiliser pour trouver vos acteurs.

La première est ActorSelection, et il faudrait construire la hiérarchie des acteurs de droite. Par exemple, vous avez des utilisateurs divisés par emplacement géographique, alors vous voudrez peut-être avoir des sélections d'acteur comme

  • /user/..../US/PA/18900/user1
  • /user/... ./US/PA/18900/user2
  • /user/..../US/NJ/07000/user3

de cette façon, vous pouvez trouver tous les acteurs à l'aide de la sélection avec caractère générique, bien que vous en tenir à juste une propriété pour les filtrer

L'autre façon est de hav La structure de données qui stockerait tous vos drapeaux/propriétés, par exemple.

classe affaire réfUtilisateur (ref: ActorRef, name: String, pays: String, zip: Entier, actif: Boolean)

Ensuite, votre 'répertoire' les stockerons comme users = List[UserRef] et vous sera en mesure d'interroger cette structure avec un seul passage en utilisant users.filter(_.active = true) ou users.find(_.name = "superuser")

Questions connexes