0

ネットワークからSIPおよびDNSメッセージを受信するアプリケーションサーバーを作成しています。

ネットワークからメッセージを受信すると、ドキュメントから、最初はを取得することがわかりますChannelBuffer。受信したメッセージの種類(SIPまたはDNS)を確認し、デコードしたいと思います。

メッセージタイプを判別するために、各タイプのメッセージにポートを割り当てることができますが、そのための別の解決策があるかどうかを知りたいと思います。私の質問は、をデコードする方法についてChannelBufferです。

ChannelHandlerSIPまたはDNSメッセージをデコードするためにNettyから提供されたものはありますか?そうでない場合、カスタムを作成するためのタイプ階層の適切な場所はどこでしょうChannelHandlerか。

私の質問を説明するために、例としてHttpRequestDecoder、階層は次のとおりです。

java.lang.Object
    org.jboss.netty.channel.SimpleChannelUpstreamHandler
        org.jboss.netty.handler.codec.frame.FrameDecoder
            org.jboss.netty.handler.codec.replay.ReplayingDecoder<HttpMessageDecoder.State>
                org.jboss.netty.handler.codec.http.HttpMessageDecoder
                    org.jboss.netty.handler.codec.http.HttpRequestDecoder

また、ChannelHandlerデコードとエンコードに2つの異なるものを使用する必要がありますか、それとも両方に1つを使用する可能性はありChannelHandlerますか?

ありがとう

4

1 に答える 1

1

ポートの統合 (ここに例を示します) が本当に必要な場合、つまり、同じポートで異なるプロトコルを受信する場合は、ハンドラーでプロトコルを検出し、適切なアクションを実行する必要があります。パイプラインに異なるハンドラーを挿入するのと同じくらい簡単です。

ただし、SIP と DNS が同じポートを共有する可能性は非常に低いため、問題を複雑にする必要はありません。

Netty 用の SIP デコーダー/エンコーダーは見たことがありませんが、メッセージで何をしたいかによっては、HTTP デコーダーは非常に良い出発点です (チャンクは SIP でサポートされていないため、より単純にすることができます)。

DNS と SIP のデコードを 1 つのハンドラー (またはその他の組み合わせ) で組み合わせようとしないことを強くお勧めします。ハンドラーはできる限りシンプルで首尾一貫したものにしてください。必要に応じて、代わりにハンドラーを結合します。

于 2012-07-05T12:42:44.143 に答える