首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头升级8至9个缺失类

码头升级8至9个缺失类
EN

Stack Overflow用户
提问于 2018-03-14 13:57:21
回答 1查看 883关注 0票数 0

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

我现在有一个稍微老一点的版本正在升级,它有不再在Jetty中的包和类,我找不到任何文档来查看它们被替换了什么、在哪里/在哪里。

以下内容已不复存在:

代码语言:javascript
复制
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.util.thread.Timeout;
import org.eclipse.jetty.server.AbstractHttpConnection;

不再存在的HttpURI.getCompletePath可以使用getPath()或getDecodedPath() HttpClient不再具有:

代码语言:javascript
复制
setThreadPool 
setMaxConnectionsPerAddress 
setTimeout 
setRequestHeaderSize 
setResponseHeaderSize

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

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

代码语言:javascript
复制
 HttpDestination destination, HttpRequest request, List<Response.ResponseListener> listeners 

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

下列方法也不再存在:

代码语言:javascript
复制
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();

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 15:20:27

进口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做很多事情,并且只使用HttpURI来拼凑一个URI,用于HTTP/2物理连接和逻辑通道请求。

HttpClient不再拥有:

HttpClient大约6年前被重写,以满足更新的HTTP/1.1RFCs、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

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

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

HttpClient和HttpConfiguration是不相关的。

HttpExchange()不再具有公共默认构造函数,因此我不能用默认构造函数覆盖它。在新的HttpExchange(9.4)中,它需要在construtctor中使用以下三个参数:它们现在在哪个类上?我只能访问HttpClient _client、ServletConfig和ServletContext 下列方法也不再存在: exchange.setScheme(HttpScheme.HTTPS.equals(request.getScheme())?HttpScheme.HTTPS_BUFFER:HttpScheme.HTTP_BUFFER);onResponseContent onResponseHeaderComplete onResponseStatus onResponseHeader onConnectionFailed setRequestHeader 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)不再存在

不再存在,不再有替代品(它是许多bug/问题的根源)

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

危险将罗宾逊-这表明一个严重的坏/危险的代码库。这样做的代码基一开始就不应该存在。

虽然有访问connection/endpoint/channel/httpinput/httpoutput/interceptors,的内部方法,但所有这些概念都必须考虑到任何成功的希望,而不仅仅是连接。

你的问题是尖叫“我有一个旧的代理,我试图更新”。Jetty现在是100%异步,Servlet 2.x天的早期InputStream/OutputStream行为已经过去了。如果您不开发带有异步I/O功能的代理解决方案,那么您将不可避免地会遇到无休止的错误/问题/失败,直到您将其更新为Servlet3.1异步I/O特性。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49279663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档