2015-09-25 102 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客户端不会有任何问题。