8
votes

Comment refactuer ce code en utilisant des flux AKKA.

L'idée est de garder le canal ouvert pour l'utiliser plus tard. Dans Playframework 2.5.x La documentation indique que vous devez utiliser des flux AKKA, mais ne dit rien comment réaliser cet exemple. Quelqu'un peut m'aider? xxx


4 commentaires

Quelle est la question réelle?


Dupliqué possible de Framework Comment utiliser les flux AKKA Sortie sur un site Web


@Anton La question est de savoir comment refactoriser le code en utilisant AKKA Streams, l'idée est en mesure de garder le canal ouvert et de l'utiliser plus tard en réponse à un autre événement.


Je comprends mais ce serait vraiment utile si vous mettez cette explication dans la question elle-même - la seule phrase de la publication n'est pas une vraie question, mais une déclaration


3 Réponses :


-1
votes

Je pense que vous recherchez simplement comment faire une connexion WebSocket d'écho avec Play 2.5 et le flux de flux AKKA.

Ceci devrait faire le tour p>

  def socket = WebSocket.accept[String, String] { request =>
    Flow[String]
      .map(msg => "I received your message: " + msg)
  }


1 commentaires

En fait, je sais comment faire une bande d'écho, mais ce n'est pas ce que je demande. Dans mon exemple, vous pouvez voir que vous pouvez utiliser le canal pour appuyer sur les messages et vous pouvez stocker la chaîne et l'utiliser plus tard. Supposez que vous recevez un événement et vous devez informer l'utilisateur par la chaîne



1
votes

J'ai enfin trouvé une solution utilisant des acteurs. J'ai trouvé ceci: xxx pré>

puis j'ai examiné le code source d'actorflow.actorref: https://github.com/playframework/playframework/blob/2.5.0/framework/src/play-streams/src/main/scala/play/api/libs/streams/actorflow.scala a> p>

et est venu avec cette solution: p>

lazy val broadcastActorRef = actorSystem.actorOf(Props[UsersBroadcastActor])

def flowsocket = WebSocket.accept[JsValue, JsValue] { request =>
    ActorFlow.actorRef(out => UserActor.props(out, broadcastActorRef))
}


0 commentaires

4
votes

Vous devrez faire quelque chose comme ça! XXX

La première partie créera, étant donné un évier et un flux, les objets que vous aurez besoin de pousser les messages et de les recevoir (Abonnez-vous à l'éditeur).

Enfin, vous allez créer un flux pour chaque demande de bande que vous recevez avec ce code flow.fromsinkandsource ... quelque chose qui n'est pas clair en ce qui concerne les flux AKKA ( source S, évier s et flux s) est qu'ils représentent la forme du débit, mais pas le flux en soi ... Le flux va lorsque vous les matérialisez (avec méthode Runwith ou exécuter ). Maintenant ... jouer reçoit soit Source S (lors de l'utilisation d'événements envoyés par serveur) ou flux S lorsque vous utilisez WebSockets. Et ils ne sont pas encore matérialisés ... Vous devez donc les matérialiser (la première ligne), puis créer un flux à nouveau! (la ligne WebSocketCockAck)

Je suis désolé si je ne suis pas assez clair, utilisez ce code, cela fonctionnera.


2 commentaires

La nouvelle PLAY 2.5 WebSocket API est clairement un trainwreck


Met une surcharge syntaxique, mais une fois compris, je pense que c'est en fait assez puissant