Akka IO.TCP与Json

Aug*_*sto 7 sockets tcp scala akka

我用akka.io.tcp编写了一个客户端和服务器,在阅读客户端发送的消息时遇到了问题.我用json发送消息.在客户端,我这样写消息:

connection ! Write(ByteString(msgString))
Run Code Online (Sandbox Code Playgroud)

在服务器端,我有以下内容:

override def receive: Receive = {
  case Received(data) => listener ! Json.parse(data.utf8String)
  case PeerClosed => {
    context stop self
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是akka一次只能读取多条消息,所以我得到了一个无效的Json.有没有办法让akka一次只读一条消息?

Kon*_*ski 6

Akka的TCP模块(并且被设计为)非常"低级别",因此我们不提供任何类型的帧分隔符.您应该将其视为TCP级构建块,然后您必须构建您的东西.

在您的示例中,Actor必须聚合传入的数据块,并检测json文档何时"完成",然后触发解组.

为此提供开箱即用的东西的想法非常引人注目......我会问这些人我们计划支持这些用例的计划.

不过,我希望这有帮助!