2015-09-25 103 views
5

我還沒有找到任何解決方案。看來Jetty還不支持此功能。我可能會錯,請賜教。配置Jetty WebSocket客戶端以使用代理

我有一個非常簡單的Java客戶端,它連接到Java服務器localhost:8080。我想在它們之間添加一個透明代理,以模擬我們可以在公司的專用網絡中找到的東西。

+0

一個java客戶端的是什麼?什麼樣的代理? HTTP/1.1? HTTP/2? websocket over http/1.1?在http/2上的websocket?透明?相反?服務器端?客戶端? –

+0

使用Jetty的WebSocket Java客戶端。看標題。目前使用HTTP/1.1,但我不知道它會如何影響我的問題。現在我只想設置一個透明代理。 –

+0

Upvoting。在目前的狀態下,這個問題帶來了寶貴的答案。 –

回答

5

更新:日,2017年

在碼頭9.4.0及以後開始,本地碼頭WebSocketClient支持通過碼頭HttpClient的代理。

這可以通過聲明一個HttpClient及其代理配置,然後將其交給the WebSocketClient constructor來使用。

這隻具有以下工作:

  • HTTP/1.1升級到WebSocket的
  • 本地的Jetty的WebSocket的API

這並不不能與以下工作:

  • HTTP/2(沒有HTTP/2上的WebSocket規範爲的又)
  • JSR356 javax.websocket(有想法的API打破更改JSR356 ClientContainer允許通過在碼頭的HttpClient通過一個構造,讓我們知道這是filing a new issue on github爲您可行的選擇這麼說)

原來的答案

隨着碼頭9,有一個爲要麼碼頭原生的WebSocket客戶端,或JSR-356(javax.websocket)客戶端實現無代理支持。

該支持定於碼頭10(其正在跟蹤的Servlet 4),並且將導致在整個客戶端庫套件在碼頭的完整再加工具有用於相等支持:

  • HTTP/1.1
  • HTTP/2(天然/直接)
  • HTTP/1.1升級到HTTP/2(H 2 C)
  • HTTP/1.1升級到的WebSocket
  • HTTP/2的WebSocket通道(目前規範草案)
  • 代理支持
  • Cookie支持
  • 等...

碼頭上現有的WebSocket客戶端實現是獨立的,由於JSR-356支持的要求。

現有的WebSocket客戶端不利用Jetty 9.x中現有的Jetty HttpClient。如果確實如此,那麼代理支持可能會在一組非常有限的情況下工作。

這是一個低優先級的功能請求,因爲目前很少有支持WebSocket的實際代理(實際上,它們通常對HTTP/1.1升級的支持不好)。即使Jetty自己的服務器端代理目前也不支持HTTP/1.1升級連接。

+0

這是否意味着我仍然可以將消息發送給遠程代理,但是不能使用Jetty自己創建一個消息?感謝您的詳細解答。 –

2

根據圖2 How HTML5 Web Sockets Interact With Proxy Servers,如果你試圖用一個透明代理,您不必要求在客戶端的代理支持。另一方面,明確的代理需要客戶端庫支持代理。

如果您的代理是透明的,Jetty WebSocket客戶端不會有任何問題。