2013-03-28 4 views
1

Я применил обработчик канала для обработки http pipelining. Мой код находится в github: https://github.com/huntc/netty-http-pipeliningПодтверждение подхода к подшивке Netty http

Мой вопрос касается подхода, который я принял, и является ли он разумным в контексте архитектуры 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()

остальное выглядит хорошо

+0

Спасибо! Теперь код выполняет синхронизацию. Я должен был более внимательно прочитать javadoc в обработчике ниже по течению! Также вместо этого отключите соединение. –

+0

Мой главный вопрос: правильно или приемлемо преобразовывать события сообщений в обработчике вверх? –

Смежные вопросы