1

我已经实现了一个用于处理http pipelining的通道处理程序。我的代码在 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

您还可以做更多有趣的事情,例如发送分块回复。

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

4

1 回答 1

1

我快速浏览了一下......一些评论。

1)您对 PriorityQueue 的访问必须同步,因为下游事件可能被任何线程触发。

2) nextRequiredSequence 需要做同样的事情或使用 AtomicInteger 应该更好

3)你想使用 Channel.close()

其余看起来不错

于 2013-03-28T07:05:46.353 回答