Ответ 1
1) Если клиент заинтересован только в отправке, а не в получении, вы всегда можете отключить чтение с канала, как показано ниже.
channel.setReadable(false);
2) Вы можете увеличить пропускную способность очень легко, имея несколько клиентских каналов на клиента, а также может масштабироваться.
3), и вы можете сделать следующие настройки для улучшения производительности в целом (для чтения/записи)
-
Лучше иметь пипетку SEDA, добавив EXecutionHandler с OrderdMemoryAwareThreadPoolExecutor (с минимальной памятью канала max с оптимальным значением)
bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override public ChannelPipeline getPipeline() throws Exception { return Channels.pipeline( executionHandler1,//sharable new MessageDecoderHandler(), new MessageEncoderHandler(), executionHandler2,//sharable new BusinessLogicHandler1(), new BusinessLogicHandler2()); } });
-
Настройка для параметра writeBufferHighWaterMark канала оптимального значения (убедитесь, что установка большого значения не приведет к перегрузке)
bootstrap.setOption("writeBufferHighWaterMark", 10 * 64 * 1024);
-
Настройка размера буфера SO_READ, SO_WRITE
bootstrap.setOption("sendBufferSize", 1048576); bootstrap.setOption("receiveBufferSize", 1048576);
-
Включение задержки TCP
bootstrap.setOption("tcpNoDelay", true);