【发布时间】:2019-01-15 19:26:57
【问题描述】:
我正在尝试使用运行 TCP 服务器的 netty 创建一个 TCP 服务器,侦听传入的 xml 字符串并将任何接收到的 xml 发送到所有打开的连接。
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 组。
有什么想法吗?对不起,如果我想要做的有点令人困惑。
【问题讨论】:
标签: java xml tcp client-server netty