Scala向自己发送消息好还是坏?
发布时间:2020-12-16 09:54:02 所属栏目:安全 来源:网络整理
导读:我正在使用json4s和play框架,我有一些地方可以在将来运行post / get请求,然后onSuccess将响应解析为一个对象并让actor将它发送回自身..这是一个例子: WS.url(authUrl).post("username=adminpassword=admin") map { response = self ! (parse(response.body)
我正在使用json4s和play框架,我有一些地方可以在将来运行post / get请求,然后onSuccess将响应解析为一个对象并让actor将它发送回自身..这是一个例子:
WS.url(authUrl).post("username=admin&password=admin") map { response => self ! (parse(response.body) "body").extract[AuthObject] } 然后回到receive方法: case AuthObject(_,sid) => //handle authorization token 这是不好的做法吗?什么是正确的方法去做?我看到的优点是能够让你的演员数据流由单一控制结构处理,但当然我说这是一个优势是错误的. 解决方法
向演员发送未来结果的
recommended方法是使用管道模式.您的代码将如下所示:
def receive:Reveice= { case authUrl:String => val authObjectF=WS.url(authUrl).post("username=admin&password=admin") map { response => (parse(response.body) "body").extract[AuthObject] } authObjectF pipeTo self } 这被认为优于map {x =>自己! x}是错误处理.如果您不处理错误情况,它们将被默默地丢弃. 将未来结果管道化为self是一种常见模式,可能与context.become / unbecome和stash一起使用以创建状态机. 在map / flatmap中关闭actor内部可变状态仍然很容易,并且在这样做时打破了actor模型的并发保证.如果你在演员中操纵未来我强烈建议你阅读这篇http://doc.akka.io/docs/akka/2.3.2/general/jmm.html#jmm-shared-state,如果你还没有这样做的话. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |