我正在写一个应用程序服务器,它将接收来自网络的SIP和DNS消息。协议特定的通道处理程序
当我收到来自网络的消息时,我从文档中了解到,起初,我得到一个ChannelBuffer
。我想确定收到哪种消息(SIP或DNS)并对其进行解码。
要确定消息类型,我可以将端口专用于每种类型的消息,但我很想知道是否存在另一种解决方案。我的问题是更多关于如何解码ChannelBuffer
。
是否有由Netty提供的ChannelHandler
解码SIP或DNS消息?如果没有,那么在类型层次结构中写入我的自定义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
的解码和编码,还是有使用的可能性单双ChannelHandler
?
由于
HttpRequestDecoder从FrameDecoder间接继承。由于我使用UDP,与我的SIP解码器是否也从FrameDecoder继承有关?另外,在我最后一个问题中,我并不是指在一个处理程序中结合DNS和SIP解码,而是在一个处理程序中编码和解码(可能使用上游和下游的处理程序)。 – 2012-07-05 13:24:26
至于UDP和FrameDecoder:我不认为它很痛,但是你必须确保#messageReceived()在一次调用中获得完整的数据报包,因为Content-Length头对UDP不是强制性的。 – 2012-07-05 14:47:40