0

ハンドラー パイプラインから特定のハンドラーを削除しようとしていますが、うまくいきません。前後のパイプラインのハンドラーをリストすると、削除しようとしたハンドラーがまだそこにあります。それで、私はここで何が間違っていますか?コードスニペットを次に示します。これらはすべて起動段階にあります。最後に行うことは、パイプライン ファクトリの構成であることがわかります。Netty 3.6.1.final を使用しています。

    List<String> handlers = new ArrayList<String>();

    // list handlers in the pipeline
    try {
        handlers = this.pipelineFactory.getPipeline().getNames();
        for (int len = handlers.size(), i = 0; i < len; i++) {
          String s = handlers.get(i);
          System.out.println("Item " + i + " is " + s);
        }

    } catch( Exception e ) {}

    try {
        System.out.println("Remove hexdump");
        this.pipelineFactory.getPipeline().remove("hexdump");
    } catch( Exception e ) {
       System.out.println("error = " + e.getMessage());
    }


    try {
        handlers = this.pipelineFactory.getPipeline().getNames();
        for (int len = handlers.size(), i = 0; i < len; i++) {
          String s = handlers.get(i);
          System.out.println("Item " + i + " is " + s);
        }

    } catch( Exception e ) {}

    // Configure the pipeline factory.
    this.bootstrap.setPipelineFactory(this.pipelineFactory);

出力は次のとおりです。

Item 0 is framer
Item 1 is hexdump
Item 2 is handler
Remove hexdump
Item 0 is framer
Item 1 is hexdump    
Item 2 is handler
4

1 に答える 1

3

完全なコードをチェックアウトしないとわかりませんが、あなたの場合、pipelineFactor.getPipeline() は常に新しいパイプラインを作成するようです。ファクトリであるため、毎回ハンドラーを作成します。もう 1 つ入れて、3 つの異なるオブジェクト ハッシュコードが表示sysoutされている場合、これが根本的な原因です。 解決策は である可能性があり、追加削除などに を使用します。 レコードについても、とにかく間違った使い方のようです。メソッドまたはハンドラーのメソッドのいずれかでオブジェクトからパイプラインを取得する必要があります。this.pipelineFactory.getPipeline()
pipeline = this.pipelineFactory.getPipeline()pipeline
ChannelHandlerContextdecodemessageReceived

于 2013-02-01T08:08:30.260 に答える