2
TCP報文幀是否有任何阿卡的方式實現數據包幀就像二郎神與{包,4}? 包看起來是這樣的:斯卡拉 - 用阿卡
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」 和 「世界」,但他們收到一個。
或者
00 00 00 05 H E L L
現在阿卡接收這8個字節,但是一個更多的是人仍下落不明,它會在下次呼叫接受,以「接受」
問題是我演員的接收總是被稱爲部分或全部請求,但我只想在收到「body」部分並且只有在完全收到時才能獲得。
所以所有將需要的是,它首先讀取那些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)
}
}