
–
–

–
–

–
–

–
–



while (hasData) {
output.write(someData) // Blocks until complete
}



while (input.isOpen) {
val event = input.read() // Blocks until event arrives
handleEvent(event) // Dispatch event
}

–

–



output.write(someData).onComplete { success =>
// What should I do here???
}


–

–
–




–
–




class SimpleSender(remote: InetSocketAddress)
extends Actor {
IO(Udp) ! Udp.SimpleSender // Acquire a manager
def receive = {
case Udp.SimpleSenderReady ⇒
context.become(ready(sender))
}
def ready(socket: ActorRef): Receive = {
case msg: String ⇒
socket ! Udp.Send(ByteString(msg), remote)
}
}
IO(Udp) ! Udp.Bind(
self,
new InetSocketAddress("localhost", 53)
)
def receive = {
case Udp.Bound(local) ⇒
context.become(ready(sender))
}
def ready(socket: ActorRef): Receive = {
case Udp.Received(data, remote) ⇒
// Process data
}

–



–

–
–

–

–
–
def receive = {
case SendIt(data) ⇒
buffer(data)
connection ! Write(data, Ack)
context.become({
case SendIt(data) ⇒ buffer(data)
case Ack ⇒
// Start serving from buffer …
}, discardOld = false)
case PeerClosed ⇒ context stop self
}

–
–

–
–

–
–
–
–
class MyStage
extends PipelineStage[Ctxt, CmdAbove, CmdBelow, EvtAbove, EvtBelow]
class MyStage
extends PipelineStage[Ctxt, CmdAbove, CmdBelow, EvtAbove, EvtBelow]
override def apply(ctx: PipelineContext) = new PipePair[CmdAbove,
CmdBelow, EvtAbove, EvtBelow] {
override val commandPipeline = {
cmdAbove: CmdAbove ⇒ ctx.singleCommand(someCmdBelow)
}
override val eventPipeline = {
evtBelow: EvtBelow ⇒ ctx.singleEvent(someEvtAbove)
}
}
val init = TcpPipelineHandler.withLogger(log,
new StringByteStringAdapter("utf-8") >>
new DelimiterFraming(maxSize = 1024, delimiter = ByteString('n')) >>
new TcpReadWriteAdapter >>
new BackpressureBuffer(
lowBytes = 100,
highBytes = 1000,
maxBytes = 10000)
)
val pipeline = context.actorOf(
TcpPipelineHandler.props(init, connectionActor, userListenerActor)
)
Actor Based Asyncronous IO in Akka
Actor Based Asyncronous IO in Akka

Actor Based Asyncronous IO in Akka