【发布时间】:2016-07-16 09:17:45
【问题描述】:
我将ScalaPB 用于我的 protobuf 编译器,它为我的协议缓冲区生成 Scala 案例类、解析器和序列化程序。
感谢 ScalaPB,我在 .proto 文件中有一个简单的 protobuf 消息,该文件已编译为 Scala 案例类。
option java_outer_classname = "MovementProtos";
message Move {
required string direction = 1;
required string mode = 2;
}
此文件已编译,允许我执行以下操作:
val move = Move(direction = "up", mode = "walk")
我有一个 Akka actor 处理 TCP 连接。
class PacketHandler extends Actor {
def receive: Receive = {
case m: Move =>
// successfully matched against Move case class message
case Tcp.Received(data) =>
// didn't match any messages
case _: Tcp.ConnectionClosed =>
context.stop(self)
}
}
如果我向我的PacketHandler 发送一条Move protobuf 消息,它会成功匹配我的Move 案例类以及我编写receive 的方式吗?
如何发送Move protobuf 消息?假设当它成功匹配 Move protobuf 消息时,它会回显它。
def receive: Receive = {
case m: Move =>
// successfully matched against Move case class message
// now echo back 'm' over the wire
sender ! Tcp.Write(???)
...
}
我没有客户端来测试我的 PacketHandler 演员,所以我一直在使用 telnet。
了解编码的Move 消息究竟是什么样子也很有用,这样我就可以通过 telnet 创建连接并通过线路发送编码的消息,并测试它在到达PacketHandler 时是否被解码。
【问题讨论】:
标签: scala akka protocol-buffers actor scalapb