簡體   English   中英

用於特定Xml標簽的Netty解碼器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM