【问题标题】:Servlet API implementation using Netty使用 Netty 实现 Servlet API
【发布时间】:2011-09-16 03:52:29
【问题描述】:

有没有人在 Netty 之上构建了一个 Servlet API 实现? 我很想构建自己的,因为我无法通过谷歌搜索实现。

基本上,我希望支持足以让球衣工作(希望球衣没有做任何线程本地的东西)。

【问题讨论】:

  • @Adam,据我了解,Netty 是通用的 Java NIO 客户端服务器套接字框架 - 它主要用于在 java 中编写网络应用程序。 (jboss.org/netty/community#nabble-td4918947) 您能否具体说明一下为什么需要 Servlet API for Netty 以及为什么像 Jetty/Tomcat 这样的现有服务器不能满足您的需求?
  • @Santosh 希望摆脱每个请求一个线程的现有范式。与事件 io 队列相比,每个请求一个线程不能很好地扩展。

标签: java servlets nio netty


【解决方案1】:

Jersey 不需要 servlet - 即使使用 JDK 中包含的轻量级 http 服务器也可以正常运行,甚至可以使用 Grizzly NIO 框架(类似于 Netty - 请参阅 grizzly.java.net)运行。要了解使用 Netty 运行它需要什么,您可能需要查看 Jersey 工作区中的 jersey-grizzly2 模块 - 如果您愿意开发它并为 Jersey 项目做出贡献,那就太好了。 现在,让你失望的是,Jersey 确实使用了 ThreadLocals。我们一直计划引入对非阻塞异步调用的支持,但这需要大量的重构,因此只会提供 2.0 版本(最终实现 JAX-RS 2.0)。无论如何,除了非阻塞的东西之外,在 Netty 等类似 Grizzly 的框架上运行它仍然很有用,因为它的“轻量级”。

【讨论】:

  • 谢谢!我看看我是否可以做出贡献。
  • 也许我可以将它用于线程本地化:issues.jboss.org/browse/NETTY-93
  • 嗨,Adam,没错——我们计划在 Grizzly 和其他可能的框架中利用类似的东西。问题是,这需要对 Jersey 核心库进行重构——这不仅仅是编写 Netty 插件的问题。这就是为什么我们可能不会在 Jersey 2.0 之前处理它。
  • 所以真正的问题是:Grizzly NIO 集成实际上是否安全,因为 Jersey 使用的是 ThreadLocals?
  • 只有 Jersey 1.x 面临这个问题,是的,它是安全的,因为它同步处理请求 - 即不利用 Grizzly 的非阻塞特性。
【解决方案2】:

如果您想将JerseyNetty 一起使用,您可能需要确保安全并使用org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory

不是,

org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory

这将允许ThreadLocal 的东西在负载下正常工作。

当然,当Jersey升级为不使用ThreadLocal,而是使用ChannelLocal时,就不再需要了。

【讨论】:

    【解决方案3】:

    如果您想让 Jersey 与 Netty 一起使用,您可以使用 https://github.com/cgbystrom/jersey-netty 提供的绑定

    【讨论】:

      【解决方案4】:

      你在找Netty-Servlet-bridge吗?

      该项目为 Netty.IO 框架 (http://netty.io/) 提供了一个 Servlet API 实现。

      Netty Servlet Bridge 允许将现有的基于 Servlet API 的 Web 应用程序集成到 Netty 支持的基础架构中。

      【讨论】:

      • 未完全实现,但 Vaadin 示例运行。
      猜你喜欢
      • 2021-09-28
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2012-02-18
      • 2017-02-15
      • 2016-01-15
      相关资源
      最近更新 更多