码头升级8至9个缺课

时间:2018-03-14 13:57:22

标签: java eclipse webserver jetty httpclient

我之前问过这个问题 - > Upgrading Jetty 8 to Jetty 9帮助对某些缺少的包/类进行特定升级。

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

以下不再存在:

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

 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();

1 个答案:

答案 0 :(得分:1)

  

import org.eclipse.jetty.io.Buffer;

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

  

import org.eclipse.jetty.util.thread.Timeout;

无替换,空闲超时与需要它的各个地方一起处理。

  

import org.eclipse.jetty.server.AbstractHttpConnection;

没有替代品,整个连接器层大约在6年前被完全重写。

  

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

使用java.net.URI

Jetty 9的HttpURI与您在Jetty 8中使用的内容没有任何关系。

我们在内部使用java.net.URI进行许多操作,并且仅使用HttpURI拼凑URI以用于HTTP / 2物理连接与逻辑信道请求。

  

HttpClient不再拥有:

大约6年前重写了HttpClient,以满足更新的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-client不存在,这些是服务器端概念。

  

我可以在HttpConfiguration上使用QueuedThreadPool,上面的大多数方法也在HTTPConfiguration上,但是是setTimeout(httpClient),现在是setIdleTimeout(HttpConfiguration)?

HttpClient和HttpConfiguration无关。

  

HttpExchange()不再具有公共默认构造函数,因此我无法使用默认构造函数覆盖它。在新的HttpExchange(9.4)中,它需要在construtctor中使用以下三个参数:   他们现在上课了什么?我只能访问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是一个内部类,并不适合您使用/访问/配置或通常搞乱。

我怀疑你正在寻找一个古老的代码库,它为jetty-client提供了一个HttpExchange概念。

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

您创建org.eclipse.jetty.client.api.Request(请参阅各种HttpClient.newRequest()方法),在请求中挂钩各种侦听器,然后Request.send()。回应您感兴趣的各种听众事件。

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

  

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

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

  

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

危险将ROBINSON - 这表示严重不良/危险的代码库。 执行此操作的代码库应该永远不会存在。

虽然有内部方法可以访问连接/端点/频道/ httpinput / httpoutput /拦截器,但所有这些概念都必须考虑到成功的希望,而不仅仅是连接。

你的问题是尖叫的&#34;我有一个旧代理我试图更新&#34;。 Jetty现在是100%Async,来自Servlet 2.x天的旧的InputStream / OutputStream行为早已不复存在。如果您没有开发具有异步I / O的代理解决方案,那么在更新Servlet 3.1异步I / O功能之前,您注定会遇到无穷无尽的错误/问题/失败。

帮自己一个忙,并阅读整个org.eclipse.jetty.proxy包。

您最终会扩展AsyncProxyServlet(对于典型的代理行为)或AsyncMiddleManServlet(对于具有内容修改行为的代理),并将servlet端异步I / O实现连接到智能的HttpClient的异步I / O行为。