gpt4 book ai didi

java - 如何在 Netty 中根据 URI 路由请求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:12 24 4
gpt4 key购买 nike

我是 Netty 的新手,为了更加熟悉它,我正在构建一个简单的 HTTP 服务器。我想做的一件事是处理基于 URI 的路由。我四处寻找示例并找到了一些方法,想看看哪种方法最有意义。

  1. 有一个“路由”处理程序,可以根据 HTTPMessage 中的 URI 添加/删除其他处理程序。如果我必须为每个请求都这样做,这似乎效率很低。

  2. 让“路由”处理程序将 HTTPMessage 和 HTTPContent 包装在另一个对象中,然后将其传递给适当的处理程序。例如,我可以有一个扩展 SimpleChannelInboundHandler 的 InfoHandler 和路由器 InfoHTTPRequest 对象。通过这种方式,管道保持固定,我不会即时更改它 - 虽然我正在创建更多对象。

  3. 有一个路由处理程序,它只有处理不同端点的方法。我可以有一个 handleInfo 方法、一个 handleUpdate 方法等,每个方法都有自己的实现并引用自己的依赖项。

PS - 我正在使用 Netty 4.0,我的大部分理解来自各种在线研究和阅读 Netty In Action 一书。

最佳答案

我使用固定管道,它只负责解码/编码请求/响应(以及可选的聚合、压缩、静态 header 等)。

管道中的最终处理程序传递给可配置的 RequestResolver(通用以支持 HTTP 以外的类型),它看起来有点像:

public interface RequestResolver<T> {
void execute(@Nonnull ChannelHandlerContext ctx, @Nonnull T req);
}

请求解析器负责决定如何处理请求(即在必要时进行路由)并且通常传递给已在其上注册的一个或多个操作,或者返回 404。它没有任何事情可做管道太多了,除了它需要一个 ctx 来排队响应。

当 Netty 4 还是 alpha-01 时,我就开始使用它,当时还没有可用的路由框架插件,所以我用 Java 编写了自己的 RequestResolver,最近我用 Clojure 编写了另一个,它重新使用了 Clout 路由来自 Compojure。

关于java - 如何在 Netty 中根据 URI 路由请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com