Я использую Netty 4 в своем проекте. Я обнаружил, что он назначает один поток каждому каналу (подключению) и использует его для приема и отправки данных.
В моем приложении я получаю запросы с канала, обрабатываю их в разных потоках (мои собственные потоки), а затем отправляю ответы обратно через один и тот же канал. Из-за использования одного потока для входящего и исходящего, обработка полученных пакетов ожидает, когда поток отправляет пакеты.
Есть ли способ использовать 2 потока для каждого канала, один для приема (обработка входящих данных) и один для отправки (обработка исходящих данных)?Netty 4 - Используйте разные темы для отправки и получения
0
A
ответ
0
Я обнаружил, что для чтения и записи используется только один поток, и нет способа его изменения.
2
С помощью другой EventExecutorGroup вы можете поместить логику отправителя и получателя в разные потоки, то есть отправить обработчик в одну EventExecutorGroup и обработчик записи в другой.
Но обычно для отправки достаточно быстро, и вам не нужно использовать свою собственную нить. Для получения и последовательной длительной обработки вам, вероятно, понадобится использовать собственный поток, поместив логику в группу DefaultEventExecutorGroup, которая предоставляет пул потоков, которые будут использоваться всеми подключенными каналами, и давая один поток только для одного такого канала.
Пример кода ниже:
final EventExecutorGroup bizEventLoopGroup = new DefaultEventExecutorGroup(50);
public void initChannel(Channel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
//other code...
p.addLast(bizEventLoopGroup, LOGIN_HANDLER, new LoginHandler());
//LoginHandler is time-consuming since it will need to ensure sending back all previously cached message.
Смежные вопросы
- 1. Используйте один разъем для отправки и получения данных
- 2. Используйте ajax для отправки формы и получения информации с сервлета
- 3. Используйте 2 разных сервера для отправки и получения электронной почты
- 4. Netty 4, используйте текущий поток для HTTP-клиента
- 5. Используйте Jetty или Netty?
- 6. Поддержка NewRelic для Netty 4
- 7. Инструмент для отправки запроса и получения ответа
- 8. Используйте такой же udp-сокет для получения/отправки async
- 9. Netty 4 io.netty.channel.PartialFlushException после записи
- 10. Netty 4 ChannelInboundMessageHandlerAdapter
- 11. Настройка сервера Netty для получения ответа HTTP
- 12. Netty 4, использование ExecutorService
- 13. Блокировка в Netty 4
- 14. Насколько стабилен Netty 4?
- 15. IdleStateHandler в Netty 4?
- 16. Netty 4 IpFilter
- 17. Netty 4 альтернатива LineBasedFrameDecoder
- 18. Netty 4 Decoder Issue
- 19. Netty 4 OrderedMemoryAwareThreadPoolExecutor
- 20. WebApi разные DTO для получения и публикации
- 21. Netty 4 Beta 3 issue
- 22. Используйте JavaScript для отправки Ajax.BeginForm()
- 23. Имена функций для отправки и получения RPC?
- 24. Сокеты Java для отправки и получения данных
- 25. переменная URL для отправки и получения
- 26. Буферизованные классы и данные для отправки/получения
- 27. Использование RestSharp для отправки и получения данных
- 28. WCF для отправки запроса и получения ответа
- 29. Используйте document.getElementById для получения значения
- 30. Используйте PHPmailer для отправки вложения
Всегда использовать одну нить ... Я не понимаю, почему это «ждать» будет для приема пакетов. Это потому, что вы «блокируете»? –
спасибо. Когда приложение отправляет некоторые данные, поток ввода-вывода занят для отправки данных и в это время (при отправке данных) обрабатываются не входящие данные (означает, что MessageReceived (..) не вызывается) – hyda
Нет способа ... netty всегда использовать тот же поток для приема и отправки. Я просто удивляюсь, почему он «займет так много времени» для отправки. Можете ли вы дать больше информации –