Die Situation: Ich habe eine Proxy-Anwendung, die Netty 4.0.17.Final verwendet (FYI: Ich hatte bereits das Problem mit den Versionen 4.0.13.Final und 4.0.9.Final) und das basiert auf der proxy from the Netty examples.Netty EventExecutorGroup bricht Pipeline
Der Hauptunterschied zwischen meinem Code und dem Beispiel ist, dass mein Code keine Verbindung zum Backend-Server herstellt, wenn der Kanal aktiv wird, sondern nur beim ersten Lesen, da dieser zuerst einige Eingaben überprüfen muss und Weiterleiten dieser Nachricht an den Backend-Server.
Ich habe Gerät getestet und meine App stundenlang getestet und es funktioniert gut.
Das Problem: Als die erste Nachricht Bedürfnisse erhielt einige Sperroperation auszuführen ich eine separate EventExecutorGroup
für diesen einen Handler zu verwenden versucht, so macht, dass (so dass die IO-Threads blockiert werden nicht wichtig):
Dies (= die einzige Änderung, die ich gemacht habe!) Bricht die Anwendung während Belastungstests. Was bricht? XXX von 3500 Client-Verbindungen berichten mir, dass YY von 500 Nachrichten für diese Clients keine Antwort vom Proxy erhalten haben (jede Anfrage sollte eine Antwort bekommen). Ein Auszug aus den Client-Protokollen:
2014-02-14 00: 39: 56,146 [id: 0x34cb2c60] Fehler (com.nsn.ucpsimulator.common.UcpDecoder) - Idle-Verbindung (/127.0.0.1:7201). PDUs empfangen: 13
2014-02-14 00: 39: 56,146 [id: 0xf0955993] Fehler (com.nsn.ucpsimulator.common.UcpDecoder) - Idle-Verbindung (/127.0.0.1:7201). PDUs empfangen: 13
2014-02-14 00: 39: 56,147 [id: 0x9a911fa3] Fehler (com.nsn.ucpsimulator.common.UcpDecoder) - Idle-Verbindung (/127.0.0.1:7201). PDUs empfangen: 13
2014-02-14 00: 39: 56,149 [id: 0x811bbadf] Fehler (com.nsn.ucpsimulator.common.UcpDecoder) - Idle-Verbindung (/127.0.0.1:7201). PDUs empfangen: 13
2014-02-14 00: 39: 56,150 [id: 0x0c4d4c5a] Fehler (com.nsn.ucpsimulator.common.UcpDecoder) - Idle-Verbindung (/127.0.0.1:7201). PDUs erhalten: 13
Der Proxy-App sagt mir, dass 500 Nachrichten empfangen wurden und weitergeleitet, aber das nur 13 Antworten empfangen wurden und zurück an den Client weitergeleitet:
2014-02-14 00 : 39: 57.683 [ID: 0x39af563b] FEHLER (be.demmel.fun.UcpDecoder) - Leerlaufverbindung (/127.0.0.1:49359). PDUs erhalten: 500
2014-02-14 00: 39: 57,683 [id: 0x82056d39] Fehler (be.demmel.fun.FrontendHandler) - Idle-Verbindung (/127.0.0.1:52004), es Schließen . PDUs weitergeleitet: 500. Erfolg: 500
2014-02-14 00: 40: 00,717 [id: 0xcdca8f66] Fehler (be.demmel.fun.UcpDecoder) - Idle-Verbindung (/127.0.0.1:7900) .PDUs empfangen: 13
2014-02-14 00: 40: 00,718 [id: 0xcdca8f66] Fehler (be.demmel.fun.BackendHandler) - Idle-Verbindung (/127.0.0.1:7900). PDUs weitergeleitet: 13. Erfolg: 13
Der Server sagt mir, dass alles gut ist:
2014-02-14 00: 40: 02,855 [id: 0x4980be2c] ERROR (com.nsn .ucpsimulator.common.UcpDecoder) - Leerlaufverbindung (/127.0.0.1:37944). PDUs erhalten: 500
2014-02-14 00: 40: 02,856 [id: 0x4980be2c] Fehler (com.nsn.ucpsimulator.server.TestUcpHandler) - Idle Verbindung (/127.0.0.1:37944). PDUs zurückgeschickt: 500
Weiß jemand, was das verursachen könnte?
Zusätzliche Informationen:
beachten Sie, dass alles funktioniert, bis ich mit einem separaten
EventExecutorGroup
für die Blockierung Handler starten.Jedes Mal, wenn XX-Clients blockieren, blockieren sie alle die gleiche Anzahl an Antworten, die an den Client weitergeleitet werden.
ich den netty Code hier hochgeladen haben (es runnable ist, enthält die Proxy-Server und Client-Anwendungen mit einer README): https://github.com/AndrewBourgeois/ucp-proxy/tree/master/src/main/java/be/demmel/fun
Wenn der Proxy-App getötet wird, dieser Fehler auf der Server-Seite erscheint :
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[na:1.7.0_45]
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[na:1.7.0_45]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[na:1.7.0_45]
at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[na:1.7.0_45]
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379) ~[na:1.7.0_45]
at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setBytes(UnpooledUnsafeDirectByteBuf.java:401) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:869) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:208) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:87) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:478) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) ~[netty-all-4.0.9.Final.jar:na]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [netty-all-4.0.9.Final.jar:na]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
ich glaube, dass dieser Fehler, dass sind meine Netty Handler zeigt die Server-Antworten nicht verarbeiten.
Haben Sie das jemals gelöst? Ich habe ein ähnliches Problem. – user1019182