In Netty 4 "proxy" example, l'auto del canale leggere opzione è stata disattivata:Perché Netty 4 "proxy" esempio ha per impostare canale "AUTO_READ" come falsa
serverBootStrap.group(bossGroup, workerGroup)
...
.childOption(ChannelOption.AUTO_READ, false)
Se commentato childOption(ChannelOption.AUTO_READ, false)
, l'esempio proxy non può funzionare . E più dettagliato, nel metodo channelRead
della classe HexDumpProxyFrontendHandler
, il outboundChannel
sarà sempre inattivo.
E ho studiato Netty codice sorgente, ha rilevato che "auto leggere" influenzerà come quello nei metodi fireChannelActive
e fireChannelReadComplete
della classe DefaultChannelPipeline
if (channel.config().isAutoRead()) {
read();
}
Ma io ancora non riesco a capire quale sia il rapporto tra la lettura automatica e l'esempio del proxy. Nella mia mente, quando un dato invia al buffer in entrata, Netty dovrebbe attivare l'evento di lettura del canale.
Quindi ci sono due domande:
- Perché disabilita lettura automatica è necessario ad esempio "proxy"?
- Perché abilitare la lettura automatica renderà
outboundChannel
sempre inattivo?
Potrebbe essere se l'esecuzione automatica è vera causerà OOME. Ma perché abilitare questa opzione renderà l'esempio del proxy Netty non può funzionare completamente? –
il problema è che se non lo si imposta a false si può iniziare a leggere prima di essere connessi al peer remoto. –
Ciao Maurer, Quindi intendi che l'opzione di lettura automatica è vera renderà il metodo "fireChannelActive" per richiamare l'evento di lettura del canale prima che questo canale sia realmente attivo. Quindi perché l'evento di lettura è accaduto troppo presto, quindi i dati saranno mancanti. La mia comprensione è giusta? –