6

アクターが scala でメッセージを受信するたびに、特性 AbstractActor のオブジェクトであるキーワード「送信者」を使用して、アクターの送信者にアクセスできます。

私の質問は、メッセージが受信されるたびに、この「送信者」がどのようにアクセスできるようになっているのですか?

また、送信者とともに、ipaddress、データの送信元ポートなどの他のデータにもアクセスできるこの実装をオーバーライドできますか。

私の知る限り、メッセージが送信された場所から IP アドレスとポートを取得する方法はありません。この「送信者」オブジェクトから送信者の IP アドレスとポート番号を取得する方法はありますか?

助けてくれてありがとう。

4

2 に答える 2

6

(あなたは実際にどの俳優を言っていないので、Akkaの答えも大丈夫だと思います)

このsenderメソッドはActorRef、送信サイトで暗黙的または明示的に取得された を提供します。!アクター内で使用すると、それimplicit val self: ActorRefが検出されて使用されます。その送信者がActorSystem受信者とは異なる場所に住んでいる場合、つまりリモート メッセージ送信の場合、senderref には返信に必要なすべての情報が含まれます。そのパスを確認してください。

val s = sender    // Actor[akka://<system>@<host>:<port>/user/path/to/actor]
val p = s.path    // akka://<system>@<host>:<port>/user/path/to/actor
val a = p.address // akka://<system>@<host>:<port>
val host = a.host // Some(<host>), where <host> is the listen address as configured for the remote system
val port = a.port // Some(<port>), where <port> is the actual listen port of the remote system

したがって、要するにsender.path.address.host(およびポートのアナログ)は、必要なものを提供するはずです。

于 2012-11-15T09:51:13.930 に答える
1

AKKAアクターシステムでは!def!(message:scala.Any)(implicit sender:akka.actor.ActorRef)としてオーバーロードされます。ここで、senderはメッセージを送信したアクターです。その後、ActorRefでpathメソッドを呼び出すことができますが、そこから実際のIPアドレスを取得することはできないと思います。

于 2012-11-14T10:26:33.607 に答える