1

Netty と Protobuf を使用してメッセージ ディストリビューターを実装したいと考えています。ディストリビューターは、基本の protobuf メッセージと拡張機能があることを認識し、これらの拡張機能を登録する他のクラスにメッセージを渡すサーバーです。

Protobuf では、拡張機能を個別のファイルで宣言できるため、ディストリビューターは拡張機能の形式について知る必要がありません。ただし、これは、すべての拡張機能を認識している ExtensionRegistry を使用して ProtobufDecoder を作成する必要がある Netty 配管で機能するようです。そうしないと、ここで説明する問題に遭遇します。

ここに何か不足していますか、それとも独自のデコーダーを作成しないとできないことですか? Javaの例があれば、それは非常に役に立ちます。

4

2 に答える 2

1

API ドキュメントで説明されているように、ExtensionRegistryを作成するときに を指定できます。ProtobufDecoder

于 2011-11-15T23:49:10.933 に答える
0

私の 2 セントは、拡張機能に要素のリストがある場合、または潜在的に大きなメッセージになる可能性のあるものがある場合は、拡張機能を使用しないことです。サイズが正しく区切られるように、protobuf メッセージで長さフレーミング デコーダー/エンコーダーのいずれかを使用する必要があります。メッセージを 2 バイト サイズのヘッダーで 64k に収めたい場合、フレーム内に収まるかどうかを確認するためにメッセージで toByteArray を呼び出し続けるのは非効率的です。

代わりに、マスター メッセージで列挙型を使用し、拡張機能ではなく、拡張機能に含まれる protobuf シリアル化されたメッセージであるバイト配列を使用します。このようにして、メッセージを作成するときにメッセージにデータを後置し続けることができ、サイズ制限を超えた場合、Netty がフレームに対して大きすぎるという例外をスローするのではなく、メッセージを適切に半分に分割できます。

于 2012-01-20T13:52:35.260 に答える