use*_*249 6 scala remote-actors actor
每当actor在scala中收到消息时,我们都可以使用关键字'sender'来访问actor的发送者,该关键字是trait AbstractActor的对象.
我的问题是,每当收到邮件时,这个"发件人"如何变得可访问.
而且,我们是否可以覆盖此实现,其中还有一些其他数据也可以访问,例如ipaddress,数据来自的端口.
据我所知,你无法从消息来源的地方获取ipaddress和端口..有没有办法从这个'发送者'对象中获取发件人和端口号的ipaddress?
谢谢您的帮助.
(你真的没说哪个演员,所以我假设Akka的答案也没关系)
该sender
方法为您提供ActorRef
在发送站点隐式或明确拾取的方法:如果您!
在actor中使用,implicit val self: ActorRef
则会找到并使用它.如果该发件人ActorSystem
与收件人不同,即它是远程邮件发送,则sender
ref将包含回复所需的所有信息,只需查看其路径:
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
Run Code Online (Sandbox Code Playgroud)
因此,简而言之,sender.path.address.host
(和端口模拟)应该可以满足您的需求.
小智 1
在AKKA演员系统中,!重载为 def !(message : scala.Any)(implicit sender : akka.actor.ActorRef) 其中 sender 是发送消息的 actor。之后,您可以在 ActorRef 上调用路径方法,但我认为您无法从那里获得真实的 IP 地址。
归档时间: |
|
查看次数: |
4361 次 |
最近记录: |