5

私はこのブログ投稿に出くわしました。これは、AkkaIOソケットサーバーに送信される文字列メッセージの固定長フレーミングを行う方法を示す、素晴らしくて啓発的なものでした。私はここで見つけたScalaBuffと呼ばれるオープンソースライブラリを使用してきました。これは、プロトコルバッファオブジェクトの上に素敵な薄いレイヤーを作成します。

私が抱えている問題は、ブログの作成者(直接連絡するためのリンクが見つかりませんでした)のコードを長さ(4バイトのシーケンス)、次にprotobufバイト配列に適合させることです。後でどのメッセージがネットワーク上にあるかを理解することについて心配することができます。今は、1つのサンプルメッセージでコードを機能させたいだけです。

私の問題は、AkkaIOコードをakkaByteStringsのプルから、protobufメッセージから生のバイトを送信およびプルできるように変換するのに問題があることです。これは、AkkaIOを使用するソケットサーバーに精通していないことの症状です。protobufオブジェクト(Zombie Sighting)のバイト表現に出入りすることはできますが、ブログからサンプルを取得して、文字列ではなくバイト配列で動作させることはできません。

ポイントA(上記のブログ投稿)からポイントB(AkkaIOソケットサーバーにprotobufメッセージを送信するAkkaIOソケットクライアント)に到達する方法について、アドバイス、サンプルコード、または入力がある場合。私はクライアントが働いていると思います..多分)、それは素晴らしいでしょう。

4

1 に答える 1

0

これを試して:

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

MyMessageは、MyMessage.protoテンプレートを使用してScalaBuffコンパイラで生成されたクラスです。Googleprotobufライブラリには個別のByteStringクラスがあることに注意してください。2つを混在させないように注意してください。

更新:ケビンの問題は解決されました。基本的に問題は、バイト配列を文字列に正しく変換する新しいString()でバイト配列をラップする代わりに、Array[Byte]のtoStringメソッドを使用していたことでした。 「%s」.format呼び出しで使用されます。

于 2013-02-02T01:16:59.790 に答える