特定 Xml 标签的 Netty 解码器

Netty Decoder for specific Xml Tags

我正在尝试使用运行 TCP 服务器的 netty 创建一个 TCP 服务器,侦听传入的 xml 字符串并将任何接收到的 xml 发送到所有打开的连接。

xml 的格式始终相同(以 开头和结尾)。

除了处理它自己的服务器连接外,它还打开与第二台服务器的连接,该服务器做同样的事情并在两者之间汇集所有 xml。 所以基本上有一个 ServerBootstrap 监听来自它监听的任何连接的传入 XML 数据,以及一个应用程序自行管理的预定义连接。

我遇到的两个主要问题是

a.) 根据 xml 标签正确侦听数据并删除传入的字符串。 我试过在我的管道中使用 XmlDecoder,但这似乎没有做任何事情。事实上,我的服务器Bootstrap 没有做任何事情就结束了,它应该为了监听目的而阻塞吗?

这是我的服务器Bootstrap

try {
    ServerBootstrap bootstrap = new ServerBootstrap()
            .group(listenGroup, speakingGroup)
            .channel(NioServerSocketChannel.class)
            .localAddress(new InetSocketAddress("127.0.0.1", mListeningPort))
            .childHandler(new ChannelInitializer<SocketChannel>() {
                @Override
                protected void initChannel(SocketChannel ch) throws Exception {
                    ch.pipeline()
                            //.addLast("string-decoder", new StringDecoder())
                            .addLast("xml-decoder", new XmlDecoder())
                            .addLast(new ServerHandler());
                }
            });            
    ChannelFuture channelFuture = bootstrap.bind().syncUninterruptibly();
} finally {
    listenGroup.shutdownGracefully();
    speakingGroup.shutdownGracefully();
}

我遇到的另一个问题是建立与镜像服务器的连接并将其添加到服务器Bootstrap 的输出列表中。我自己对此做的测试较少,理论上返回到常规 ol' Bootstrap 的接口应该可以工作,但我不确定如何保持 Bootstrap 连接有效或是否有效最好以某种方式获取 Channel 并将其添加到 ServerBootstraps 组。

有什么想法吗?对不起,如果我正在尝试做的事情有点令人困惑。

我的猜测是 xml 解码器不支持您用来分隔消息的括号。 (即您实际上并没有发送有效的 xml)是否有理由不能只使用包含整个消息的最外层 xml 组?