缺少码头升级 8 到 9 类
jetty upgrade 8 to 9 missing classes
我之前问过这个问题 -> 这有助于进行一些缺失的特定升级 packages/classes。
我现在有一个稍旧的版本正在升级,它有软件包和 classes 不再在 Jetty 中,我找不到任何文档来查看它们有什么或 where/if已被替换。
以下不再存在:
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.util.thread.Timeout;
import org.eclipse.jetty.server.AbstractHttpConnection;
HttpURI.getCompletePath 不再存在我可以使用 getPath() 或 getDecodedPath()
HttpClient 不再有:
setThreadPool
setMaxConnectionsPerAddress
setTimeout
setRequestHeaderSize
setResponseHeaderSize
我可以在HttpConfiguration上使用QueuedThreadPool,上面大部分方法也在HTTPConfiguration上,但是是setTimeout(httpClient),现在是setIdleTimeout(HttpConfiguration)?
HttpExchange() 不再具有 public 默认构造函数,因此我无法使用默认构造函数覆盖它。
在新的 HttpExchange(9.4) 中,它需要在构造函数中包含以下三个参数:
HttpDestination destination, HttpRequest request, List<Response.ResponseListener> listeners
他们现在 class 穿什么?我只有
访问 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 或其他 class?
IO.copyThread(InputStream, OutputStream) 不再存在
org.eclipse.jetty.server.RequestRequest 不再有 getConnection();
import org.eclipse.jetty.io.Buffer;
不存在,我们现在用java.nio.ByteBuffer
。
import org.eclipse.jetty.util.thread.Timeout;
不替换,idle timeout 处理in-line与各个需要它的地方。
import org.eclipse.jetty.server.AbstractHttpConnection;
没有替换,整个Connector层已经在6年前被完全重写了。
HttpURI.getCompletePath no longer exists can I use getPath() or getDecodedPath()
使用java.net.URI
.
Jetty 9 的 HttpURI
与您在 Jetty 8 中使用的内容无关。
我们在内部使用 java.net.URI
做很多事情,并且只使用 HttpURI
拼凑一个 URI 用于 HTTP/2 物理连接与逻辑通道请求。
HttpClient no longer has:
HttpClient 大约在 6 年前被重写以满足更新后的 HTTP/1.1 RFC、HTTP/2、FastCGI 和 Proxy 用法。
根据您提出的问题类型,您可能想要查看 Jetty 具有的整个可扩展代理层 built-in
setThreadPool
使用setExecutor()
注意:这不是一件明智的事情,尤其是 Jetty 8 和 Jetty 9 之间的连接处理存在巨大差异。
可以从 [1..n] 个线程处理单个请求(在其生命周期内)。
扰乱执行器(线程池)的最常见原因是人为地限制资源利用率。搞乱executor是限制资源利用的错误地方。
setMaxConnectionsPerAddress
连接现在被合并。
您可以选择连接池实现,并在 HttpClient
上设置一些通用连接池行为。
参见 setMaxConnectionsPerDestination
和 setMaxRequestsQueuedPerDestination
setTimeout
现在有很多超时。
- HttpClient.setIdleTimeout
- HttpClient.setConnectTimeout
- Request.setIdleTimeout
- 连接空闲超时
- 连接池空闲超时
setRequestHeaderSize
setResponseHeaderSize
jetty-client 不存在,这些是服务器端概念。
I can use QueuedThreadPool on HttpConfiguration, and most of the above methods are also on HTTPConfiguration, but is setTimeout(httpClient), now setIdleTimeout(HttpConfiguration)?
HttpClient 和 HttpConfiguration 无关。
HttpExchange() no longer has a public default constructor and therefore I cant override it with a default constructor. In the new HttpExchange(9.4) it requires the following three arguments in construtctor:
What class are they on now? I only have access to the HttpClient _client,
ServletConfig and ServletContext
The following methods no longer exist either:
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 Is there
a replacement for HttpExchange or another class with these methods?
HttpExchange 是一个内部 class 并且不适合您 use/access/configure 或通常乱用。
我怀疑您正在查看一个古老的代码库,其中包含 jetty-client.
的 HttpExchange 概念
Jetty 9 中不再存在 HttpClient 的整个概念。
您创建一个 org.eclipse.jetty.client.api.Request
(参见各种 HttpClient.newRequest()
方法),挂接到请求的各种侦听器,然后 Request.send()
它。响应您感兴趣的各种监听器事件。
我建议您首先只从 Response.CompleteListener
开始,仔细查看在其 onComplete(Result)
方法中传递给您的 Result
对象。
IO.copyThread(InputStream, OutputStream) no longer exists
已不存在,无替代(它是许多 bugs/issues 的来源)
org.eclipse.jetty.server.RequestRequest no longer has getConnection();
DANGER WILL ROBINSON - 这表示严重 bad/dangerous 代码库。
执行此操作的代码库本来就不应该存在。
虽然有内部方法可以访问 connection/endpoint/channel/httpinput/httpoutput/interceptors,但要想成功,必须考虑所有这些概念,而不仅仅是连接。
你的问题尖叫 "I have an old proxy i'm attempting to update"。
Jetty 现在是 100% 异步的,Servlet 2.x 时代的旧 InputStream/OutputStream 行为早已一去不复返了。如果您不开发具有 Async I/O 的代理解决方案,那么您注定会无休止地 errors/issues/failures,直到您针对 Servlet 3.1 Async I/O 功能更新它。
帮自己一个忙,阅读整个 org.eclipse.jetty.proxy
包。
您将结束扩展 AsyncProxyServlet
(对于典型的代理行为)或 AsyncMiddleManServlet
(对于具有内容修改行为的代理),并挂钩 servlet 端异步 I/O 实现智能地进入 HttpClient 的 Async I/O 行为。
我之前问过这个问题 ->
我现在有一个稍旧的版本正在升级,它有软件包和 classes 不再在 Jetty 中,我找不到任何文档来查看它们有什么或 where/if已被替换。
以下不再存在:
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.util.thread.Timeout;
import org.eclipse.jetty.server.AbstractHttpConnection;
HttpURI.getCompletePath 不再存在我可以使用 getPath() 或 getDecodedPath() HttpClient 不再有:
setThreadPool
setMaxConnectionsPerAddress
setTimeout
setRequestHeaderSize
setResponseHeaderSize
我可以在HttpConfiguration上使用QueuedThreadPool,上面大部分方法也在HTTPConfiguration上,但是是setTimeout(httpClient),现在是setIdleTimeout(HttpConfiguration)?
HttpExchange() 不再具有 public 默认构造函数,因此我无法使用默认构造函数覆盖它。 在新的 HttpExchange(9.4) 中,它需要在构造函数中包含以下三个参数:
HttpDestination destination, HttpRequest request, List<Response.ResponseListener> listeners
他们现在 class 穿什么?我只有 访问 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 或其他 class?
IO.copyThread(InputStream, OutputStream) 不再存在
org.eclipse.jetty.server.RequestRequest 不再有 getConnection();
import org.eclipse.jetty.io.Buffer;
不存在,我们现在用java.nio.ByteBuffer
。
import org.eclipse.jetty.util.thread.Timeout;
不替换,idle timeout 处理in-line与各个需要它的地方。
import org.eclipse.jetty.server.AbstractHttpConnection;
没有替换,整个Connector层已经在6年前被完全重写了。
HttpURI.getCompletePath no longer exists can I use getPath() or getDecodedPath()
使用java.net.URI
.
Jetty 9 的 HttpURI
与您在 Jetty 8 中使用的内容无关。
我们在内部使用 java.net.URI
做很多事情,并且只使用 HttpURI
拼凑一个 URI 用于 HTTP/2 物理连接与逻辑通道请求。
HttpClient no longer has:
HttpClient 大约在 6 年前被重写以满足更新后的 HTTP/1.1 RFC、HTTP/2、FastCGI 和 Proxy 用法。
根据您提出的问题类型,您可能想要查看 Jetty 具有的整个可扩展代理层 built-in
setThreadPool
使用setExecutor()
注意:这不是一件明智的事情,尤其是 Jetty 8 和 Jetty 9 之间的连接处理存在巨大差异。
可以从 [1..n] 个线程处理单个请求(在其生命周期内)。
扰乱执行器(线程池)的最常见原因是人为地限制资源利用率。搞乱executor是限制资源利用的错误地方。
setMaxConnectionsPerAddress
连接现在被合并。
您可以选择连接池实现,并在 HttpClient
上设置一些通用连接池行为。
参见 setMaxConnectionsPerDestination
和 setMaxRequestsQueuedPerDestination
setTimeout
现在有很多超时。
- HttpClient.setIdleTimeout
- HttpClient.setConnectTimeout
- Request.setIdleTimeout
- 连接空闲超时
- 连接池空闲超时
setRequestHeaderSize setResponseHeaderSize
jetty-client 不存在,这些是服务器端概念。
I can use QueuedThreadPool on HttpConfiguration, and most of the above methods are also on HTTPConfiguration, but is setTimeout(httpClient), now setIdleTimeout(HttpConfiguration)?
HttpClient 和 HttpConfiguration 无关。
HttpExchange() no longer has a public default constructor and therefore I cant override it with a default constructor. In the new HttpExchange(9.4) it requires the following three arguments in construtctor: What class are they on now? I only have access to the HttpClient _client, ServletConfig and ServletContext
The following methods no longer exist either:
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 Is there a replacement for HttpExchange or another class with these methods?
HttpExchange 是一个内部 class 并且不适合您 use/access/configure 或通常乱用。
我怀疑您正在查看一个古老的代码库,其中包含 jetty-client.
的 HttpExchange 概念Jetty 9 中不再存在 HttpClient 的整个概念。
您创建一个 org.eclipse.jetty.client.api.Request
(参见各种 HttpClient.newRequest()
方法),挂接到请求的各种侦听器,然后 Request.send()
它。响应您感兴趣的各种监听器事件。
我建议您首先只从 Response.CompleteListener
开始,仔细查看在其 onComplete(Result)
方法中传递给您的 Result
对象。
IO.copyThread(InputStream, OutputStream) no longer exists
已不存在,无替代(它是许多 bugs/issues 的来源)
org.eclipse.jetty.server.RequestRequest no longer has getConnection();
DANGER WILL ROBINSON - 这表示严重 bad/dangerous 代码库。 执行此操作的代码库本来就不应该存在。
虽然有内部方法可以访问 connection/endpoint/channel/httpinput/httpoutput/interceptors,但要想成功,必须考虑所有这些概念,而不仅仅是连接。
你的问题尖叫 "I have an old proxy i'm attempting to update"。 Jetty 现在是 100% 异步的,Servlet 2.x 时代的旧 InputStream/OutputStream 行为早已一去不复返了。如果您不开发具有 Async I/O 的代理解决方案,那么您注定会无休止地 errors/issues/failures,直到您针对 Servlet 3.1 Async I/O 功能更新它。
帮自己一个忙,阅读整个 org.eclipse.jetty.proxy
包。
您将结束扩展 AsyncProxyServlet
(对于典型的代理行为)或 AsyncMiddleManServlet
(对于具有内容修改行为的代理),并挂钩 servlet 端异步 I/O 实现智能地进入 HttpClient 的 Async I/O 行为。