Netty http конвейерная проверка подхода
Я реализовал обработчик канала для обработки http-конвейеризации. Мой код на github: https://github.com/huntc/netty-http-pipelining
Мой вопрос касается подхода, который я выбрал, и является ли он разумным в контексте архитектуры Netty.
Когда мой HttpPipeliningHandler получает восходящий HttpRequest, он формирует новое событие сообщения типа OrderedUpstreamMessageEvent. Это событие также является частью моего пакета и содержит информацию относительно запроса, который потребуется при формулировании ответных сообщений.
Когда обработчик канала далее в восходящем направлении получает OrderedUpstreamMessageEvent, он формирует ответ, генерируя OrderedDownstreamMessageEvent, например:
ctx.sendDownstream(new OrderedDownstreamMessageEvent(oue, somemessage));
где
ctx = ChannelHandlerContext instance
oue = OrderedUpstreamMessageEvent instance
somemessage = some message instance to be sent as an http response
Вы также можете делать больше забавных вещей, таких как отправка чанкованных ответов.
Этот подход выглядит разумным? Это конечно работает! Регулярно / приемлемо преобразовывать события сообщения в обработчике восходящего потока? Очевидно, что если событие сообщения преобразуется снова, функция конвейеризации не будет работать.
1 ответ
Я быстро взглянул... Несколько комментариев.
1) Ваш доступ к PriorityQueue должен быть синхронизирован, поскольку нисходящее событие может быть запущено любым потоком.
2) То же самое нужно сделать для nextRequiredSequence или использовать AtomicInteger, который должен быть лучше
3) Вы хотите использовать Channel.close()
Остальное выглядит хорошо