[英]Netty Decoder for specific Xml Tags
我正在嘗試使用運行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組。
有什么想法嗎? 抱歉,這有點讓我困惑。
我的猜測是xml解碼器不支持您用來定界消息的括號。 (即您實際上不是在發送有效的xml)是否有一個原因,您不能僅使用保存整個消息的最外層xml組?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.