Hi,
Akka streams is defintely fit for "main stream development with semi complex business logic", it is however not a framework but a tool in a toolkit. As such it does have a learning threshold (just like actors do if you are new to that concept), so some problems may not initially be expressible using it, and of course not all problems does fit perfectly with the paradigm.
If you are happy with your actor based solution, I don't see an obvious need to rewrite using streams, although I personally find the IO part very nicely expressed with streams. You could also just introduce streams in parts of your system where you need back pressure and it is an abstraction that fits the problem, the only thing to think of is the asynchronous boundaries and where you go from backpressured to not backpressured and how to deal with that.
1. Sounds like the cross connection session buffer would be nicely kept as an actor, you can interact with actors from your flows using the ask pattern and mapAsync, there are also additional stages specifically designed to interact with actors (Source.actorRef and Sink.{actorRef|actorRefWithAck} for example).
2. This is just application logic and highly application specific, deserialize incoming messages and provide a stream or stage that closes the stream if any other than a valid auth message comes from the client, and thereafter lets the messages through.
3. To guarantee at least once delivery after the parsing a message you would have to persist it before parsing, the app could crash, the OS could crash, the server hardware could fail just the moment after parsing but before anything has been done with it.
The section on using TCP with streams may be useful:
--
Johan