当前位置: 首页 > 知识库问答 >
问题:

在阿克卡问和说的区别是什么?

权烨磊
2023-03-14

阅读Scala文档时,我很难理解询问和讲述之间的区别。

http://doc.akka.io/docs/akka/snapshot/scala/actors.html各国:

! 表示“发射并忘记”,例如异步发送消息并立即返回。也被称为告诉。

? 异步发送消息并返回表示可能回复的未来。也称为询问。

如果我使用的演员产生了一个网络请求,那么问和告诉之间有什么区别?在这两种情况下,请求都将异步生成,并且必须等待响应,换句话说,如果参与者正在调用网络服务并等待响应,如何“告诉”立即返回?

共有2个答案

欧阳昊阳
2023-03-14

听起来你已经知道了asktell之间的基本区别,但不明白如何使用tell让其他参与者参与处理HTTP请求。

为了使在HTTP请求处理程序中使用tell更有意义,您必须使用不要求请求处理程序返回响应的HTTP服务器。Spray就是这样一个HTTP服务器。

在Spray中,请求处理程序不返回其响应;它被赋予一个RequestContext对象,响应该请求需要调用该对象上的某个方法。您只需将该RequestContext发送给另一个参与者,然后该参与者就可以响应该请求:

path("foo") {
  rc => rc complete "foo"  // respond here
} ~
path("bar") {
  rc => barActor ! DoBar(rc)  // send it to bar; NO RESPONSE HERE
}

然后barActor提到的演员可以说

case DoBar(rc) =>
  rc complete "bar"  // respond here, in another actor

Spray将请求上下文打包成一个可以从任何参与者传递和完成的对象,这一事实非常适合参与者模型。另一方面,如果您的Web框架要求调用的处理程序返回响应,那么如果您想让另一个参与者参与进来,您唯一的选择就是使用ask

Tyepafe宣布,Play将很快在下面使用Spray。我希望这意味着Play将允许将请求发送给其他参与者进行处理。

薛宏壮
2023-03-14

从消息发送者(不一定是参与者)的角度来看,askshow之间的区别。ask将发送消息并返回一个未来,可以等待到超时或收到回复,会发送消息并立即返回。

询问的情况下,收到消息的参与者应在操作完成后回复发件人。

 类似资料:
  • 本文向大家介绍请说说Canvas和SVG图形的区别是什么?相关面试题,主要包含被问及请说说Canvas和SVG图形的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 Canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格式保存结果图像 最适合图像密集型的游戏,其中的许多对象会被频繁重绘 SVG 不依赖分辨率 支持事件处理器 最适合带有大型渲染区域的应

  • 本文向大家介绍说下background-color:transparent和opacity:0的区别是什么?相关面试题,主要包含被问及说下background-color:transparent和opacity:0的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 background-color:transparents 对应的是背景色(background-color)设为透明; opa

  • 本文向大家介绍举例说明constructor和instanceof的区别是什么?相关面试题,主要包含被问及举例说明constructor和instanceof的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 是 的属性之一, 是运算符 的结果是方法, 的结果是布尔值 获取的是原型链的最顶层, 可以判断是否属于原型链的任意一层

  • 本文向大家介绍说说你理解的同步和异步的区别是什么?相关面试题,主要包含被问及说说你理解的同步和异步的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 同步:指的是同一时间只会执行一个任务,只有当前任务执行结束才会继续执行下一个任务。 异步:指的是人主观上同一时间程序同时进行多个任务,实际上是已极小的时间间隔在不同任务间进行切换来实现的。 JS中指的就是多个任务按照你编码的顺序开始任务,但是任

  • 本文向大家介绍请问GBDT和XGBoosts的区别是什么?相关面试题,主要包含被问及请问GBDT和XGBoosts的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 首先介绍一下boosting思想,每次训练单个弱分类器时,都将上一次分错的数据权重提高一点再进行当前单个弱分类器的学习,这样往后执行,训练出来的单个弱分类器就会越在意那些容易分错的点,最终通过加权求和的方式组合成一个最终的学习器

  • 本文向大家介绍#{}和${}的区别是什么?相关面试题,主要包含被问及#{}和${}的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 #{}是预编译处理,${}是字符串替换。 Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值; Mybatis 在处理{}时,就是把${}替换成变量的值。 使用#{}可以有效的防