Есть ли какой-либо способ в Akka добиться пакетного кадра, как в Erlang с {пакетом, 4}? Packet выглядит примерно так:Scala - Пакет TCP-пакетов с использованием Akka
4 bytes length in big endian | body...
Например:
00 00 00 05 H E L L O 0 0 0 5 W O R L D
было бы два пакета "HELLO" и "Мир", но они получили в качестве одного.
Or
00 00 00 05 H E L L
Теперь Akka получает эти 8 байт, но еще один до сих пор отсутствует, и он будет принят в следующем вызове «получить»
Проблема заключается в том, что мой актер Получим всегда называется с частичным или полным запросом, но я бы хотел получить только часть «тела» при приеме и только когда он будет полностью получен.
Таким образом, все, что было бы необходимо, это то, что он сначала считывает эти 4 байта, а затем ждет, пока он не прочитает другие N байтов (N = длина в заголовке 4 байта), и ТОГДА он отправит сообщение моему актеру. Возможно ли это как-то?
Мой код сервера:
import java.net.InetSocketAddress
import akka.actor.{Props, Actor}
import akka.io.Tcp.Bind
import akka.io.{IO, Tcp}
class Server extends Actor{
import context.system
import Tcp._
IO(Tcp) ! Bind(self, new InetSocketAddress("0.0.0.0", 1234))
def receive ={
case bound @ Bound(localAddr) =>
println("Server is bound to "+localAddr.toString())
case failed @ CommandFailed(_ : Bind) =>
context stop self
case connected @ Connected(remote, local) =>
val handler = context.actorOf(Props[ClientHandler])
val connection = sender()
println(remote.toString + "connected to "+local.toString())
connection ! Register(handler)
}
}