Netty http流水线方法验证

问题描述:

我已经实现了一个处理http pipelining的通道处理程序。我的代码在github上:https://github.com/huntc/netty-http-pipeliningNetty http流水线方法验证

我的问题是围绕着我采取的方法,以及它在Netty架构中是否合理。

当我的HttpPipeliningHandler接收到一个上游的HttpRequest时,它会形成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 

还可以做更多的乐趣的东西一样发送分块回复形成一个答复OrderedUpstreamMessageEvent。

这种方法看起来合理吗?它当然有效!在上游处理程序中转换消息事件是否经常/可接受?显然,如果消息事件再次被转换,那么流水线功能将不起作用。

我有一个快速的看...几个意见。

1)您的PriorityQueue访问必须同步,因为任何线程都可能触发下游事件。对于nextRequiredSequence做或使用的AtomicInteger

2)同样的需求应该是更好的

3)你想用Channel.close()

其余的看起来不错

+0

谢谢!代码现在负责同步。我应该更仔细地阅读下游处理程序的javadoc!现在还使用close而不是断开连接。 – 2013-03-28 21:04:56

+0

我的主要问题是:它是否可以接受在上游处理程序中转换消息事件? – 2013-03-28 21:05:36