Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在actors中实现超时_Scala_Actor - Fatal编程技术网

Scala 在actors中实现超时

Scala 在actors中实现超时,scala,actor,Scala,Actor,我不熟悉scala和演员。我需要实施这样的假设情况: 服务器等待消息,如果它在10秒内没有收到任何消息,它将向客户端发送消息。否则它将接收传入的消息。如果它正在处理某条消息,而另一条消息出现,那么它需要排队,我想这是由scala参与者自动完成的 我遇到的第二个问题是睡觉。我需要演员在收到信息时睡上一段固定的时间。但另一方面,我无法阻止,因为我希望传入消息排队等待进一步处理 Daniel对问题的无输入条件部分给出了更好的答案。所以我删掉了我的低级解决方案 至于问题的延迟响应部分,当参与者睡觉时,消

我不熟悉scala和演员。我需要实施这样的假设情况: 服务器等待消息,如果它在10秒内没有收到任何消息,它将向客户端发送消息。否则它将接收传入的消息。如果它正在处理某条消息,而另一条消息出现,那么它需要排队,我想这是由scala参与者自动完成的


我遇到的第二个问题是睡觉。我需要演员在收到信息时睡上一段固定的时间。但另一方面,我无法阻止,因为我希望传入消息排队等待进一步处理

Daniel对问题的无输入条件部分给出了更好的答案。所以我删掉了我的低级解决方案

至于问题的延迟响应部分,当参与者睡觉时,消息队列不会阻塞。它可以只是睡眠,信息仍然会累积

但是,如果您希望从收到消息到处理消息之间有固定的延迟,例如,您可以创建一个立即工作但将消息包装在延迟请求中的参与者:

case class Delay(when: Long, what: Any) { }

// Inside class DelayingActor(workingActor: Actor)
case msg => workingActor ! Delay(delayValue + System.currentTimeMillis , msg)
然后,工作演员将

case Delay(t,msg) =>
  val t0 = System.currentTimeMillis
  if (t>t0) Thread.sleep( t - t0 )
  msg match {
    // Handle message
  }

Daniel为问题的无输入条件部分提供了更好的答案。所以我删掉了我的低级解决方案

至于问题的延迟响应部分,当参与者睡觉时,消息队列不会阻塞。它可以只是睡眠,信息仍然会累积

但是,如果您希望从收到消息到处理消息之间有固定的延迟,例如,您可以创建一个立即工作但将消息包装在延迟请求中的参与者:

case class Delay(when: Long, what: Any) { }

// Inside class DelayingActor(workingActor: Actor)
case msg => workingActor ! Delay(delayValue + System.currentTimeMillis , msg)
然后,工作演员将

case Delay(t,msg) =>
  val t0 = System.currentTimeMillis
  if (t>t0) Thread.sleep( t - t0 )
  msg match {
    // Handle message
  }
这个怎么样

loop {
  reactWithin(10000) {
    case TIMEOUT => // send message to client
    case work => // do work
  }
}
这个怎么样

loop {
  reactWithin(10000) {
    case TIMEOUT => // send message to client
    case work => // do work
  }
}

谢谢,这就是我想要的。谢谢,这就是我想要的。在2016年读到这篇文章我不确定——这是关于scala的。演员?如果是,它是如何翻译成akka.actor的?@Suma是的,也不知道。在2016年读到这篇文章,我不确定——这是关于scala.actors的?如果是,它如何翻译成akka.actor?@Suma是的,不知道。