问题标签 [servlet-3.1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring 使用 servlet3.1 的 Async-IO
如何使用Spring-5Async-IO
的 (setWriteListener) ?Servlet3.1
另外,我发现Link-A提到需要将 Listener 添加到 outputStream。
另一方面, Link-B说它应该与spring 5
and一起使用tomcat 8.5+
。
接下来我分析了一个 JVM ,发现它CoyoteOutputStream.checkNonBlockingWrite
总是返回false
和示例代码。deferredResult
NON-DeferredResult
我无法尝试Link-A
推荐,因为我不确定NioReadListener
实施及其论点。
PS:
环境 Spring-boot-2.0.4.RELEASE + Windows
java - 如何利用 Spring Web MVC 控制器中的非阻塞请求
我试图展示在 Spring MVC 中使用 Reactive Streams 的优势。为此,我有一个运行两个端点的小型 Jetty 服务器:
/normal
返回一个 POJO/flux
返回包装在 a 中的相同对象Mono
然后我启动一个客户端并在其中一个端点同时启动几千个请求。我本来希望看到第二个端点的错误更少,因为处理是异步进行的。但是,我有时会在启用异步的端点上观察到更多错误;在这两种情况下,任何地方都有 60 - 90% 的错误Connection refused: no further information
。
要么我在这里做错了什么,要么我不太明白。Connection refused
正是我希望避免的那种事情。
服务器
这是我来自服务器的代码。在这种normal
情况下,我从字面上用 a 阻塞了线程.sleep()
:
服务器通过 Maven 在 Jetty 9.4.15 上运行,web.xml 定义为:
客户
我的客户使用 Spring WebClient:
与此处问题类似的前提:WebFlux async processing。主要区别在于我正在测试错误率,或同步连接数;我预计速度不会增加。
cdi - 如何在 Tomcat 8.5/Servlet 3.1 上初始化 Weld 3.0 cid setParameterName
我正在尝试将旧 Web 应用程序从 JSF 2.1.1-FCS 升级到在 Tomcat 8.5 Servlet 3.1 容器中运行的 2.2.14。
Mojarra JSF 最低要求(我猜对于最新版本,该页面似乎不清楚)除其他外说 CDI 1.2 需要 CDI 1.2 推荐 2.0。
我添加了 cd-api-2.0 和weld-servlet-shaded-3.0.0.Final 以及其他依赖项。在我测试一些我们已经使用了很长时间的 URL 之前,一切似乎都有效。我们的应用程序一直在使用cid
参数。Weld 使用相同的参数来跟踪对话。结果我们得到了WELD-000321: No conversation found to restore for id
错误。
我想org.jboss.weld.context.http.HttpConversationContext.setParameterName(String cid)
尽早调用以修改此 Web 应用程序的值。
在 Tomcat 8.5 提供的 Servlet 3.1 容器上下文中更改此值的最佳方法是什么?
java - 如何在spring mvc中使用servlet 3.1?
有 2 种不同的功能可用:
servlet 3.0允许在与容器线程不同的线程中处理请求。
servlet 3.1允许在不阻塞读/写线程的情况下读/写套接字
网上有很多关于 servlet 3.0 特性的例子。我们可以很容易地在 Spring 中使用它。我们只需要返回DefferedResult
或CompletableFuture
但是我在春天找不到使用servlet 3.1的例子。据我所知,我们必须注册WriteListener
并ReadListener
在里面做圆顶脏活。但我找不到那个听众的例子。我相信这并不容易。
您能否提供 Spring 中 servlet 3.1 功能的示例以及 Listener 实现的解释?
open-liberty - Servlet 中的异步功能
我只是回到Servlet-3.x
功能并探索它。如果我没记错的话,在 Servlet-3.x 之前,它是每个请求模型的线程,并且它会用完池中的线程,从而导致大量传入流量。
因此,对于 Servlet-3.x,它说它是异步的并且不会保持线程被阻塞,而是立即释放它们,而只是委派了任务。
这是我的解释,
考虑服务器线程池中有 2 个线程
对于新的 Async Servlet 请求R1
,有一个线程T1
,这T1
会将任务委托给客户端T2
并T1
立即响应客户端。
问题:是T2
从服务器线程池创建的吗?如果是这样,我不明白这一点。
情况1:如果是旧的Synchronous Servlet 请求
T1
会一直忙于运行I/O 任务,情况2:如果是异步Servlet调用
T2
正忙于运行I/O任务。在这两种情况下,其中一个都很忙。
我尝试使用openliberty
应用服务器中的示例异步 servlet 进行检查,下面是从我的示例演示 Servlet 中捕获的示例日志。
如上所示,Default Executor-thread-116
立即释放并将长时间运行的任务委托给Default Executor-thread-54
,但我不确定它们是否来自 App Server 线程池。如果是这样,为什么不能只做Default Executor-thread-116
任务而不是委派?
有人可以对 JavaEE 中 Servlet 的这种异步行为有所了解吗
spring - 将 Spring Boot Webflux 应用 WAR 部署到 Tomcat 8
我有一个使用 WebFlux 的反应式 Spring Boot 应用程序。我需要将它作为 WAR 文件部署到 Tomcat 8 容器中。
根据Spring Webflux 文档,似乎可以通过扩展AbstractReactiveWebInitializer
类来做到这一点:
Servlet 3.1+ 容器:
要作为 WAR 部署到任何 Servlet 3.1+ 容器,您可以在 WAR 中扩展并包含 AbstractReactiveWebInitializer。该类使用 ServletHttpHandlerAdapter 包装一个 HttpHandler 并将其注册为 Servlet。
另一方面,Spring boot 文档静态内容和创建 war 文件 指出这是不可能的,因为 Webflux 应用程序不依赖于 Servlet API:
Spring WebFlux 应用程序并不严格依赖 Servlet API,因此它们不能部署为 war 文件,也不能使用 src/main/webapp 目录。
我尝试使用 spring-boot-gradle-plugin 将应用程序打包为 WAR 文件,但是在将其部署到 Tomcat 8 时它没有任何效果。
有什么建议么?
servlets - 如何构建原始的非阻塞 servlet
那里有很多关于如何使用 spring 或任何微配置文件实现(quarkus、kuuluzee)创建“反应式”服务的示例。
根据 Servlet 3.1,任何一个 servlet 都可以作为“非阻塞”处理。
我发现必须将此 servlet 执行到非阻塞 servlet 容器中,例如netty
...
第一个问题:
- 真的像我写的那样吗?我是否需要一个非阻塞 servlet 容器实现才能提供真正的“反应式”服务?
第二个问题:
- 我不清楚如何创建一个基本的原始“非阻塞”servlet。我的意思是,“正常”扩展 servlet 之间的区别是
HttpServlet
什么?这个实现会是什么样子?
有参考吗?
java - 如何使用带有 Spring 延迟结果的 Servlet 3.1 Read&Write Listener 实现
我们目前有一个使用 Servlet 3.0 延迟结果运行的 Spring 应用程序。我们要实现 Servlet 3.1 Non-Blocking IO。为此,我们需要实现 ReadListener 和 WriteListener。但是我没有找到任何关于如何注册具有延迟结果的侦听器的示例。
我在链接中找到了一个示例。
但我想要延迟结果的 NIOReadListener 和 NIOWriteListener 的实现。