当前位置 : 主页 > 大数据 > 区块链 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
我遇到了 this blog post,我发现它很棒,很有启发性,展示了如何对发送到Akka IO套接字服务器的字符串消息进行固定长度的构建.我一直在使用我发现的开源库 here called ScalaBuff,它在协议缓冲区
我遇到了 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套接字服务器)的一些输入…我我认为我有客户工作..也许),这将是非常棒的.

试试这个:

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”.格式调用.

网友评论