繁体   English   中英

码头升级8至9失踪舱位

[英]jetty upgrade 8 to 9 missing classes

我之前曾问过这个问题-> 将Jetty 8升级到Jetty 9 ,这有助于对某些缺少的软件包/类进行特定的升级。

我有一个稍旧的版本现在正在升级,并且它的软件包和类在Jetty中不再存在,并且我找不到任何文档来查看替换的内容或位置。

以下不再存在:

import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.util.thread.Timeout;
import org.eclipse.jetty.server.AbstractHttpConnection;

HttpURI.getCompletePath不再存在,我可以不再使用HttpClient的getPath()或getDecodedPath()吗:

setThreadPool 
setMaxConnectionsPerAddress 
setTimeout 
setRequestHeaderSize 
setResponseHeaderSize

我可以在HttpConfiguration上使用QueuedThreadPool,并且上述大多数方法也在HTTPConfiguration上,但是setTimeout(httpClient)是setIdleTimeout(HttpConfiguration)吗?

HttpExchange()不再具有公共的默认构造函数,因此我无法使用默认构造函数覆盖它。 在新的HttpExchange(9.4)中,它在构造函数中需要以下三个参数:

 HttpDestination destination, HttpRequest request, List<Response.ResponseListener> listeners 

他们现在在上什么课? 我只能访问HttpClient _client,ServletConfig和ServletContext

以下方法也不再存在:

onResponseContent
onResponseHeaderComplete
onResponseStatus
onResponseHeader
onConnectionFailed
setRequestHeader
exchange.setScheme(HttpScheme.HTTPS.equals(request.getScheme())?HttpScheme.HTTPS_BUFFER:HttpScheme.HTTP_BUFFER);
exchange.setMethod(request.getMethod());
exchange.setURL(url.toString());
exchange.setVersion(request.getProtocol());
addRequestHeader

是否可以用这些方法替代HttpExchange或其他类?

IO.copyThread(InputStream,OutputStream)不再存在

org.eclipse.jetty.server.RequestRequest不再具有getConnection();

导入org.eclipse.jetty.io.Buffer;

不存在,我们现在使用java.nio.ByteBuffer

导入org.eclipse.jetty.util.thread.Timeout;

没有替换,空闲超时将与需要它的各个地方一起在线处理。

导入org.eclipse.jetty.server.AbstractHttpConnection;

无需更换,整个连接器层大约在6年前已被完全重写。

HttpURI.getCompletePath不再存在,我可以使用getPath()或getDecodedPath()

使用java.net.URI

Jetty 9的HttpURI与您在Jetty 8中使用的无关。

我们在内部将java.net.URI用于许多事情,并且仅出于HTTP / 2物理连接与逻辑通道请求的目的,仅使用HttpURI将URI拼凑在一起。

HttpClient不再具有:

HttpClient在大约6年前进行了重写,以满足更新的HTTP / 1.1 RFC,HTTP / 2,FastCGI和代理用法。

根据您所询问的问题类型,您可能需要研究Jetty内置的整个可扩展代理层。

setThreadPool

使用setExecutor()

注意:这不是一件明智的事情,特别是在Jetty 8和Jetty 9之间的连接处理方面存在巨大差异的情况下。

可以从[1..n]线程处理单个请求(在其生命周期内)。

与执行器(线程池)发生冲突的最常见原因是人为地限制资源利用。 与执行器混淆是限制资源利用率的错误位置。

setMaxConnectionsPerAddress

连接已合并。

您可以选择连接池实现,还可以在HttpClient上设置一些通用的连接池行为。

setMaxConnectionsPerDestination​setMaxRequestsQueuedPerDestination​

setTimeout

现在有很多超时。

  • HttpClient.setIdleTimeout
  • HttpClient.setConnectTimeout
  • Request.setIdleTimeout
  • 连接空闲超时
  • 连接池空闲超时

setRequestHeaderSize setResponseHeaderSize

Jetty客户端不存在,这些是服务器端的概念。

我可以在HttpConfiguration上使用QueuedThreadPool,并且上述大多数方法也在HTTPConfiguration上,但是setTimeout(httpClient)是setIdleTimeout(HttpConfiguration)吗?

HttpClient和HttpConfiguration无关。

HttpExchange()不再具有公共的默认构造函数,因此我无法使用默认构造函数覆盖它。 在新的HttpExchange(9.4)中,它在构造器中需要以下三个参数:它们现在在什么类上? 我只能访问HttpClient _client,ServletConfig和ServletContext

以下方法也不再存在:

onResponseContent onResponseHeaderComplete onResponseStatus onResponseHeader onConnectionFailed setRequestHeader exchange.setScheme(HttpScheme.HTTPS.equals(request.getScheme())?HttpScheme.HTTPS_BUFFER:HttpScheme.HTTP_BUFFER); exchange.setMethod(request.getMethod()); exchange.setURL(url.toString()); exchange.setVersion(request.getProtocol()); addRequestHeader是否可以使用这些方法替代HttpExchange或其他类?

HttpExchange是一个内部类,并不意味着您可以使用/访问/配置它或将其弄乱。

我怀疑您正在查看的是古老的代码库,该代码库为码头用户提供了HttpExchange概念。

在Jetty 9中,HttpClient不再存在整个概念。

您创建一个org.eclipse.jetty.client.api.Request (请参阅各种HttpClient.newRequest()方法),挂接到请求的各种侦听器中,然后对它进行Request.send() 响应您感兴趣的各种侦听器事件。

我建议您首先只从Response.CompleteListener开始,仔细查看通过onComplete(Result)方法传递给您的Result对象。

IO.copyThread(InputStream,OutputStream)不再存在

不再存在,没有替代(这是许多错误/问题的根源)

org.eclipse.jetty.server.RequestRequest不再具有getConnection();

DANGER WILL ROBINSON-表示代码库严重/危险。 这样做的代码库最初不应该存在。

尽管有内部访问连接/端点/通道/ httpinput / httpoutput / interceptor的方法,但要想获得成功的希望,就必须考虑所有这些概念,而不仅仅是连接。

您的问题尖叫“我有一个旧的代理,我正在尝试更新”。 现在,Jetty是100%异步的,从Servlet 2.x开始,较早的InputStream / OutputStream行为已不复存在。 如果您不考虑使用异步I / O开发代理解决方案,那么注定会出现无尽的错误/问题/失败,直到为Servlet 3.1异步I / O功能更新它为止。

帮个忙,阅读整个org.eclipse.jetty.proxy软件包。

您将扩展AsyncProxyServlet (用于典型的代理行为)或AsyncMiddleManServlet (用于具有内容修改行为的代理),并将Servlet端Async I / O实现智能地链接到HttpClient的Async I / O行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM