我是Netty的新手,为了更熟悉它,我正在构建一个简单的HTTP服务器。我想做的一件事是处理基于URI的路由。我四处寻找示例并找到了一些方法,并希望看到哪些方法最有意义。
有一个“路由”处理程序,它将根据HTTPMessage中的URI添加/删除其他人。如果我必须为每个请求执行此操作,这似乎效率低下。
让“route”处理程序将HTTPMessage和HTTPContent包装在另一个对象中,然后将该对象传递给相应的处理程序。例如,我可以拥有一个扩展SimpleChannelInboundHandler和路由器InfoHTTPRequest对象的InfoHandler。通过这种方式,管道保持固定,我不会动态改变它 - 我创造了更多的物体。
拥有一个只有方法来处理不同端点的路由处理程序。我可以有一个handleInfo方法,一个handleUpdate方法等,每个方法都有自己的实现并引用它们自己的依赖项。
答案 0 :(得分:1)
我使用固定管道,它只负责解码/编码请求/响应(以及可选的聚合,压缩,静态头等)。
管道中的最终处理程序传递给可配置的RequestResolver(通用以支持HTTP以外的类型),看起来有点像:
public interface RequestResolver<T> {
void execute(@Nonnull ChannelHandlerContext ctx, @Nonnull T req);
}
请求解析器负责决定如何处理请求(即必要时进行路由),并且通常会传递给已在其上注册的一个或多个操作,或者返回404.它没有任何关系管道如此之多,除了需要用于排队响应的ctx。
当它是alpha-01时我开始使用Netty 4并且没有可用的路由框架插件,所以我用Java编写了自己的RequestResolver,最近我又用Clojure编写了另一个重用Clout路由来自Compojure。