sockets - 通过 Akka IO 和套接字的 Protocol Buffer 消息

标签 sockets scala protocol-buffers akka

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

我遇到的问题是调整博客作者的(无法找到直接联系他的链接)代码以获取长度(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 是 ScalaBuff 编译器使用您的 MyMessage.proto 模板生成的类。请注意,Google protobuf 库有一个单独的 ByteString 类,请确保不要将两者混用。

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

关于sockets - 通过 Akka IO 和套接字的 Protocol Buffer 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657435/

相关文章:

function - 带有隐式的 Scala 函数式文字

protocol-buffers - 解码 protobuf 二进制文件——得到 "Failed to parse input"

javascript - nodejs的io中的io.sockets.adapter.rooms在哪里?

algorithm - 在 Scala 中计算最多 5 的中位数

api - 为分页 API 制作 Scala 迭代器

c++ - 如何在 C++ 中使用 Google 的 Protocol Buffer 添加重复字段?

c++ - Protocol buffer 如何与遗留协议(protocol)代码交互

java - 客户端向服务器发送消息。但服务器不显示它

c# - 如何检查我是否有可以在 StreamReader 上阅读的内容?

python - 如何在一行中的套接字连接的发送方法中将字符串编码为字节?