簡體   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