配置Jetty WebSocket客户端以使用代理

Gré*_*rel 7 proxy jetty websocket

我还没有找到任何解决方案.它似乎Jetty还不支持此功能.我可能错了所以请开心.

我有一个非常简单的Java客户端连接到Java服务器localhost:8080.我想在它们之间添加一个透明的代理,以模拟我们在公司的专用网络中可以找到的内容.

Joa*_*elt 9

更新:2017年5月

从Jetty 9.4.0及更高版本开始,本机Jetty WebSocketClient通过Jetty HttpClient支持Proxies.

这通过声明一个HttpClient及其代理配置,然后将其交给WebSocketClient构造函数来使用.

这仅适用于以下情况:

  • HTTP/1.1升级到WebSocket
  • Native Jetty WebSocket API

这并没有进行下列工作:

  • HTTP/2(目前还没有针对HTTP/2的WebSocket规范)
  • JSR356 javax.websocket(有一些想法,用于破坏对JSR356 ClientContainer的更改以允许通过构造函数传入Jetty HttpClient,请通过在github上提交新问题告诉我们这是否可行)

原始答案

使用Jetty 9,Jetty Native WebSocket客户端或JSR-356(javax.websocket)客户端实现都没有代理支持.

这种支持计划用于Jetty 10(跟踪Servlet 4),并将导致Jetty中整个客户端库套件的完全重新设计,以获得对以下内容的同等支持:

  • HTTP/1.1
  • HTTP/2(本机/直接)
  • HTTP/1.1升级到HTTP/2(h2c)
  • HTTP/1.1升级到WebSocket
  • HTTP/2 websocket频道(目前在草案规范中)
  • 代理支持
  • Cookie支持
  • 等......

由于JSR-356支持要求,Jetty上现有的WebSocket客户端实现是独立的.

现有的WebSocket客户端不利用Jetty 9.x中现有的Jetty HttpClient.如果确实如此,那么代理支持可能会在一组非常有限的场景下工作.

这是一个低优先级的功能请求,因为到目前为止支持WebSocket的现有代理很少(实际上,它们通常不支持HTTP/1.1升级).甚至Jetty自己的服务器端代理当前也不支持HTTP/1.1升级连接.