Netty Different Pipeline Per UDP Datagram

Wir haben einen Server, der bereits in TCP / IP implementiert ist, aber jetzt muss das Protokoll auch UDP unterstützen.

Jedes gesendete UDP-Datagramm enthält alles, was ich zum Dekodieren benötige, sodass es ein sehr einfaches Antwort- und Antwortsystem mit durch Zeilenumbrüche getrennten Daten im Datagramm ist.

Der Code für den Bootstrap beim Starten des Servers wird unten angezeigt:

<code>    //SETUP UDP SERVER
    DatagramChannelFactory udpFactory = new NioDatagramChannelFactory(Executors.newCachedThreadPool());

    ConnectionlessBootstrap udpBootstrap = new ConnectionlessBootstrap(udpFactory);

    udpBootstrap.setOption("sendBufferSize", 65536);
    udpBootstrap.setOption("receiveBufferSize", 65536);
    udpBootstrap.setOption("receiveBufferSizePredictorFactory", new AdaptiveReceiveBufferSizePredictorFactory());

    udpBootstrap.setOption("broadcast", "true");
    udpBootstrap.setPipelineFactory(new ServerPipeLineFactoryUDP());
    udpBootstrap.bind(new InetSocketAddress(hostIp, 4000)); 
</code>

Der Pipeline-Code lautet:

<code>class ServerPipeLineFactoryUDP implements ChannelPipelineFactory
{

    private final static ExecutionHandler EXECUTION_HANDLER = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(ScorpionFMS.THREAD_POOL_COUNT, 0, 0));

    public ServerPipeLineFactoryUDP()
    {

    }

    @Override
    public ChannelPipeline getPipeline() throws Exception
    {

    ChannelPipeline pipeline = pipeline();
    pipeline.addLast("debugup", new DebugUpstreamHandler("UDP"));
    pipeline.addLast("debugdown", new DebugDownstreamHandler("UDP"));

    pipeline.addLast("framer", new DelimiterBasedFrameDecoder(256, Delimiters.lineDelimiter()));

    pipeline.addLast("decoder", new UDPRequestDecoder(true));
    pipeline.addLast("encoder", new StringEncoder());
    pipeline.addLast("executor", EXECUTION_HANDLER);
    pipeline.addLast("handler", new UDPRequestHandler(

    return pipeline;
    }
}
</code>

Das Problem ist, dass jedes Datagramm dieselbe Instanz dieser Pipeline verwendet (ich hatte gehofft, dass jedes Datagramm eine neue Instanz der Pipeline verwenden würde), sodass der gesamte Status, den ich während der Verarbeitung des Inhalts eines Datagramms speichere, gespeichert wird und das nächste Datagramm verwendet es auch, (während für TCP jede Verbindung einen eigenen Kanal und damit eine eigene Instanz der Pipeline und einen eigenen Zustand haben würde)

Ich weiß, dass dies das erwartete Verhalten beim Lesen der Dokumentation ist, aber gibt es trotzdem die Möglichkeit, netty zu zwingen, die Pipeline für jedes Datagramm neu zu erstellen? Oder gehe ich das falsch an?

Um es kurz zu machen, ich möchte, dass jedes Datagramm eine neue Instanz der Pipeline hat (das gleiche wie TCP)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage