【问题标题】:How to close jetty Http Connection after the web service method is executedweb服务方法执行后如何关闭jetty Http Connection
【发布时间】:2016-11-25 15:00:22
【问题描述】:

在 jetty 9.3.8 中配置嵌入式码头服务器时,我正在向服务器连接器添加一个连接侦听器,以跟踪码头 HttpConnection 的打开和关闭。

为当前请求提供服务的码头线程 [qtp........] 打开一个 HttpConnection。完成当前请求后,如何通知码头关闭此 HttpConnection。在服务请求一段时间后,我确实看到来自不同客户端的侦听器的回调中所有打开的连接都关闭了。

我需要在完成请求后关闭连接,即当我完成特定客户端时。

【问题讨论】:

    标签: web-services spring-mvc request jetty httpconnection


    【解决方案1】:

    尝试在请求中设置此标头:连接:关闭

    【讨论】:

      【解决方案2】:

      关闭连接是 HTTP 规范和协议的责任。

      注意:请注意,连接关闭是特定于 HTTP 版本的,遵循 HTTP/1.0、HTTP/1.1 和 HTTP/2 的不同语义

      一般来说,连接打开/关闭的处理是在 HTTP 客户端和 HTTP 服务器之间协商的,需要遵循这些规则。让服务器基于某些非 HTTP 规范的行为任意关闭连接已经很容易被滥用,并且会导致中介(例如代理、路由器、负载平衡器、缓存服务器等)出现问题。

      【讨论】:

      • 在这种情况下使用 HTTP/1.1。如果我只是中断正在处理请求的线程,我会看到 HttpConnection 关闭按预期发生。但是,当码头为其他一些请求分配相同的线程 [qtp..........] 时,我看到一个 http 连接关闭并且在 http 客户端上我得到“没有 http 响应”。如何在请求之间清除线程的中断标志和其他数据?
      • 您不应该搞乱连接和请求处理的那部分。此外,Servlet 规范(和 JEE)100% 不支持中断 Servlet 容器中的任何线程,并且保证会给您带来问题。
      • 我正在从 9.2.8 升级到 9.3.8,最初在以前的版本中,我们使用在请求完成后中断 jetty 线程(如果是长寿命心跳线程),这帮助我们关闭了低级别的 Jetty Http Connections。但是在移除此输出线程上的中断后,系统并没有提供预期的性能。任何其他可以帮助我的事情。
      • 9.2 到 9.3 是连接和请求处理的巨大飞跃,因为 9.3 添加了对 HTTP/2 的支持。
      • 首先,不要中断由 Jetty 管理的线程,这是灾难的根源(它违反了 servlet 规范,违反了 jetty 内部结构,违反了 Java 本身的建议! )。所有连接关闭都应该是协商的 HTTP 协议的一部分,使用 HTTP 规范来适当地处理它。接下来,要知道任意关闭与 HttpServletRequest 和/或 HttpServletResponse 关联的各种流通常足以表明不再需要连接。最后,升级到 Jetty 9.3.10。
      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多