我是新来斯卡拉和演员超时。我需要实现这种假设的情况: 服务器等待消息,如果它不得到任何发言权10S一段时间后,它会发送消息到客户端。否则它会收到传入的消息。如果它正在处理一些消息,并且有另一条消息到来,它需要排队(我想这是由scala actors自动完成的)。落实演员
我遇到的第二个问题是睡觉。我需要演员在接收到消息时在一段时间内休息一段时间。但另一方面,我不能阻止,因为我希望传入的消息排队进行进一步处理。
我是新来斯卡拉和演员超时。我需要实现这种假设的情况: 服务器等待消息,如果它不得到任何发言权10S一段时间后,它会发送消息到客户端。否则它会收到传入的消息。如果它正在处理一些消息,并且有另一条消息到来,它需要排队(我想这是由scala actors自动完成的)。落实演员
我遇到的第二个问题是睡觉。我需要演员在接收到消息时在一段时间内休息一段时间。但另一方面,我不能阻止,因为我希望传入的消息排队进行进一步处理。
这个怎么样?
loop {
reactWithin(10000) {
case TIMEOUT => // send message to client
case work => // do work
}
}
丹尼尔提供了更好的回答这个问题的无输入条件的一部分。所以我编辑了我的劣质解决方案。
至于问题的延迟响应部,该消息队列不同时演员睡阻塞。它可以睡觉,消息仍然会积累。
但是,如果你想从当您收到一条消息,当您处理到一个固定的延时,你可以,例如,创建一个将立即生效,但对延迟的要求包装了消息的演员:
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
}
谢谢,这是我一直在寻找。 – Darek 2010-05-28 11:01:54
2016年阅读我不确定 - 这是关于scala.actors?如果是,它如何转化为akka.actor? – Suma 2016-10-06 10:26:16
@Suma是的,不知道。 – 2016-10-06 19:52:45