通过Akka IO和套接字的协议缓冲消息

时间:2013-02-02 00:48:45

标签: sockets scala protocol-buffers akka

我遇到了this blog post,我发现它很棒,很有启发性,展示了如何对发送到Akka IO套接字服务器的字符串消息进行固定长度的构建。我一直在使用我发现here called ScalaBuff的开源库,它在协议缓冲区对象之上创建了一个很好的薄层。

我遇到的麻烦是调整博客作者(找不到直接联系他的链接)代码来获取长度(4字节序列)然后是protobuf字节数组。我可以担心以后会弄清楚哪条消息在线上,现在我只想让代码使用一条示例消息。

我的问题是我无法将Akka IO代码从akka ByteStrings转换为能够从protobuf消息发送和拉取原始字节。这是我对使用Akka IO的套接字服务器不熟悉的一种表现。我可以进出我的protobuf对象的字节表示(Zombie Sighting),但是我无法从博客中获取样本来处理字节数组而不是字符串。

如果有人有一些建议,一些示例代码或一些关于如何从A点(上面提到的博客文章)到B点(一个Akka IO套接字客户端,将一个protobuf消息发送到Akka IO套接字服务器)的输入..我想我的客户工作..也许),这将是非常棒的。

1 个答案:

答案 0 :(得分:0)

试试这个:

val myByteArray = myByteString.toArray // converts to an Array[Byte]
val myMessage = MyMessage.defaultInstance.mergeFrom(myByteArray)

MyMessage是使用MyMessage.proto模板生成的ScalaBuff编译器类。请注意,Google protobuf库有一个单独的ByteString类,请确保不要将它们混合在一起。

更新:凯文的问题已经解决了,基本上问题是他使用了数组[Byte]的toString方法,而不是将字节数组包装在新的String()中,这正确地将字节数组转换为字符串,用于“%s”。格式调用。