2013-03-28 81 views
1

我已經實現了一個處理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

我有一個快速的看...幾個意見。

1)您的PriorityQueue訪問必須同步,因爲任何線程都可能觸發下游事件。對於nextRequiredSequence做或使用的AtomicInteger

2)同樣的需求應該是更好的

3)你想用Channel.close()

其餘的看起來不錯

+0

謝謝!代碼現在負責同步。我應該更仔細地閱讀下游處理程序的javadoc!現在還使用close而不是斷開連接。 – 2013-03-28 21:04:56

+0

我的主要問題是:它是否可以接受在上游處理程序中轉換消息事件? – 2013-03-28 21:05:36