2016-03-21 10 views
0

私はNettyプロジェクトの多くの例を検索しましたが、それは単純で素晴らしいと思われます。しかし、デコーダには共通して1つのことがあります。最初にいくつかのヘッダーを読み取ってから、読み込むバイト数を事前に知っています。未知の長さでNettyのバッファをデコードするには?

もっと複雑なプロトコルを実装する必要があります。

+--------+-----------+------------+-------+------------+-------+-----------+ 
| header | msg_count | msg_type_1 | msg_1 | msg_type_n | msg_n | msg_count | 
+--------+-----------+------------+-------+------------+-------+-----------+ 
11 bytes 1 byte  1 byte  bytes  1 byte  bytes  1 byte 

ヘッダーにはシリアル番号が含まれています。次に、メッセージ数とn個のメッセージがあります。これらのメッセージの長さは異なります。送信終了時に、再度メッセージ数が再表示され、送信が完了したことが示されます。

メッセージにはさまざまな種類があります。いくつかのタイプは固定幅ですが、いくつかのタイプは異なります。 G .:

  • MSGタイプは0x01:4バイトの固定幅
  • MSGタイプ0×02:最初のバイト - Mのメッセージ長、次にmバイト

私はどのように手掛かりを持っていませんそのようなプロトコルのためのNettyデコーダを実装する。ここでの主な問題は、バッファ全体を実際に解析するまでは明確な兆候がないことです。メッセージは細かく解析され、最後にメッセージ数が再現されます。

このケースの解決に役立つNettyのメカニズムはありますか?

+0

メッセージの終了と新しいメッセージの開始をどのように知っていますか? – jtahlborn

+0

@jtahlborn最後にmsg_countを再表示した後、すぐに別のヘッダが入ってくることがあります。デリミタはありません。 –

+0

いいえ、msg_1とmsg_type_nの境界をどうやって知っていますか? – jtahlborn

答えて

1

少なくとも、ReplayingDecoderを実装できるはずです。最も効率的な実装ではないかもしれませんが、おそらく最も単純な実装です。

関連する問題