我正在尝试使用运行TCP服务器的netty制造TCP服务器,侦听传入的xml字符串,并将接收到的xml发送到所有打开的Connections。
xml始终采用相同的格式(从开始到结束)。
除了处理自己的服务器连接之外,它还打开与第二台服务器的连接,该服务器执行相同的操作并在这两者之间池所有xml。 因此,基本上有一个ServerBootstrap可以侦听来自它侦听的任何Connection的传入XML数据,以及一个由应用程序管理的预定义连接。
我遇到的两个主要问题
a。)正确地侦听数据并根据xml标签定义传入的字符串。 我尝试在管道中使用XmlDecoder,但这似乎无济于事。实际上,我的ServerBootstrap只是不做任何事情而结束,是否应该出于侦听目的而阻塞?
这是我的服务器引导程序
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();
}
另一个问题是建立与镜像服务器的连接,并将其添加到ServerBootstrap的输出列表中。我自己对此进行了较少的测试,并且从理论上讲,返回常规ol'Bootstrap的接口应该可以工作,但是我不确定如何保持Bootstrap连接有效,或者以某种方式获取Channel是否更好,以及将其添加到ServerBootstraps组。
有什么想法吗?抱歉,这有点让我困惑。
答案 0 :(得分:0)
我的猜测是xml解码器不支持您用来定界消息的括号。 (即您实际上不是在发送有效的xml)是否有理由不能仅使用包含整个消息的最外层xml组?