Netty: конвейерный вывод одного канала на вход другого
Нетти-Gurus,
Мне было интересно, есть ли ярлык /Netty-Utility/smart-trick для подключения входа одного канала к выходу другого канала. Более подробно рассмотрим следующее:
- Настройка сервера Netty (http)
- Для входящего MessageEvent получите его ChannelBuffer
- и направить его вход в NettyClient-ChannelBuffer (который должен быть настроен по аналогии с NettyServer).
Я заинтересован в том, как достигнуть пункта 3. После моих первых мыслей
// макет messageReceived (ChannelHandlerContext ctx, MessageEvent e):
ChannelBuffer bufIn = (ChannelBuffer) e.getMessage ();
ChannelBuffer bufOut = getClientChannelBuffer (); // Установка в другом месте
bufOut.write(bufIn);
мне кажется неловким, потому что
A. Я должен определить для каждого события messageReceived-Event целевой ChannelBuffer
B. Слишком низкоуровневая работа
Мое желание / видение было бы подключиться
-> вход одного канала
-> к выходу другого канала
и пусть они делают свой ввод / вывод без какого-либо дополнительного кодирования.
Большое спасибо заранее!, Traude
PS: проблема возникла, когда я пытаюсь отправить различные HTTP-запросы на сервер (одна точка входа) на несколько других серверов, в зависимости от входного содержимого (отображение на основе первой строки HTTP-запроса). Очевидно, мне также нужно сделать обратный трюк - передать клиенту обратно на сервер - но я думаю, что это будет похоже на решение вопроса ранее.
1 ответ
Похоже, вам нужно использовать мультиплексор в вашем бизнес-обработчике. Бизнес-обработчик может иметь карту. С ключом в качестве "первой строки http-запроса" и значением в качестве канала вывода для сервера. Как только вы делаете поиск, вы просто делаете channel.write(channelBuffer)
;
Также взгляните на tcp туннель Бруно де Карвалью, который может дать вам больше идей о том, как справляться с подобными требованиями.