0

我正在编写一个应用程序服务器,它将接收来自网络的SIPDNS消息。

当我收到来自网络的消息时,我从文档中了解到,起初,我收到一个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

谢谢

4

1 回答 1

1

如果您确实需要端口统一(此处是一个示例),即在同一端口上接收不同的协议,那么您必须在处理程序中检测协议并采取适当的措施。可以像在管道中插入不同的处理程序一样简单。

但是,我发现 SIP 和 DNS 不太可能共享同一个端口,因此无需使事情复杂化。

我还没有看到 Netty 的 SIP 解码器/编码器,但是根据您想要对消息执行的操作,HTTP 解码器是一个非常好的起点(并且可以变得更简单,因为 SIP 不支持分块)。

我强烈建议不要尝试在一个处理程序中组合 DNS 和 SIP 解码(或任何其他组合)。使处理程序尽可能简单和连贯。如果需要,可以合并处理程序。

于 2012-07-05T12:42:44.143 回答