Unterschied zwischen fragen und erzählen in Akka?

8

Beim Lesen des Scala-Dokuments habe ich Schwierigkeiten, den Unterschied zwischen fragen und erzählen zu verstehen.

Ссылка gibt an:

  

! bedeutet "Feuer und Vergessen", z.B. Senden Sie eine Nachricht asynchron und   sofort zurückkehren. Auch bekannt als Tell.

     

? sendet asynchron eine Nachricht und gibt ein Future zurück, das a darstellt   mögliche Antwort. Auch bekannt als fragen.

Wenn der Schauspieler, den ich benutze, eine Webanfrage erzeugt, was ist dann der Unterschied zwischen fragen und erzählen? In beiden Fällen wird die Anforderung asynchron generiert und muss auf eine Antwort warten. Mit anderen Worten: Wie kann "report" sofort zurückgegeben werden, wenn der Akteur einen Web-Service aufruft und auf eine Antwort wartet?

    
blue-sky 03.04.2014, 15:05
quelle

2 Antworten

10

Es klingt, als ob Sie bereits den grundlegenden Unterschied zwischen ask und tell kennen, aber nicht verstehen, wie tell verwendet werden könnte, um andere Akteure in die Verarbeitung von HTTP-Anfragen einzubeziehen.

Damit es sinnvoll ist, tell in Ihren HTTP-Request-Handlern zu verwenden, müssen Sie einen HTTP-Server verwenden, der nicht verlangt, dass die Request-Handler return ihre Antworten zurückgeben. Spray ist ein solcher HTTP-Server.

In Spray gibt ein Anforderungshandler seine Antwort nicht zurück; Es erhält ein RequestContext-Objekt, und das Beantworten der Anfrage beinhaltet den Aufruf einer Methode. Sie können diesen RequestContext einfach an einen anderen Akteur senden, der dann auf die Anfrage antworten kann:

%Vor%

Dann könnte der von barActor angesprochene Akteur

sagen %Vor%

Die Tatsache, dass Spray den Anforderungskontext in ein Objekt packt, das von jedem Akteur weitergegeben und vervollständigt werden kann, ist für das Akteurmodell sehr passend. Wenn Ihr Web-Framework andererseits erfordert, dass der aufgerufene Handler die Antwort zurückgibt, dann können Sie, wenn Sie einen anderen Akteur einbeziehen möchten, die Option ask verwenden.

Typesafe hat angekündigt, dass Play bald Spray darunter verwenden wird. Ich hoffe, dass Play dann erlauben wird, dass Anforderungen an andere Akteure zur Verarbeitung gesendet werden.

    
AmigoNico 03.04.2014, 16:25
quelle
12

Der Unterschied zwischen ask und tell liegt in der Sicht des Nachrichtensenders (der nicht notwendigerweise ein Akteur ist). ask sendet die Nachricht und gibt eine Zukunft zurück, auf die gewartet werden kann, bis ein Timeout oder eine Antwort empfangen wird. tell sendet die Nachricht und kehrt sofort zurück.

Im Fall von ask sollte der Akteur, der die Nachricht empfängt, dem Absender antworten, wenn die Operation abgeschlossen ist.

    
Richard Close 03.04.2014 15:21
quelle

Tags und Links