Spring Netflix Zuul 上的网络套接字

Websocket over Spring Netflix Zuul

关于这个问题:https://github.com/spring-cloud/spring-cloud-netflix/issues/163 是否有合理的方法来设置 Spring Cloud Zuul 反向代理以与 Websockets 一起使用?

我能够设置 websocket 端点的代理并从客户端成功连接到它,但由于连接超时非常短,连接不断关闭。此时我最关心的是 Zuul 服务自动发现。尝试使用与参考中描述的 file downloads 类似的解决方法是否有意义,尽管连接超时时间更长?

有没有合理的替代方案?喜欢编写自己的 ZuulFilter 吗?

因为没有答案,这就是我能够找到的关于将 Zuul 与 WebSockets 结合使用的信息。

我的问题在某种意义上是不准确的,因为我正在使用 Sock.js 并且当通过 Zuul Sock.js 连接时收到:

405 - 错误请求

响应,它立即回退到 xhr-straming,这是在它能够建立连接时,所以

不可以在 Zuul 上使用 Websocket 协议。

但我仍然面临第二个问题,即使我能够使用回退 Sock.js 传输进行连接,代理也不断关闭连接。幸运的是 Sock.js 要求服务器每 10 秒 "send" 一次心跳(默认情况下),因此调整 ribbon 和 hystrix 超时您可以维持 "Sock.js connection" 而无需特殊的 onerror 重新连接逻辑。因此,如参考文献中所述:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000 丝带: 连接超时:3000 读取超时:60000

我已将此超时设置为 Sock.js 使用的时间的两倍 - 所以 20 秒。

这仍然不是本机 Websocket 支持。

我仍在寻找 Zuul 代理的合理替代品,或者一些建议,我可以采取哪些其他步骤来完成这项工作。

一直在关注这个问题,我们有类似的需求,通过zuul服务器代理websocket连接。尽管要求略有不同,因为 websocket 连接将是 'special',并且不需要像通过 zuul 发出的其他请求那样处理。

以前这很容易通过 nodejs 和 http-proxy 实现。这是如何在 java 和 Spring 中启动的示例 Boot: https://github.com/barrett-rob/java-websocket-reverse-proxy

注意:没有安全、连接重建等

问题已经得到解答,但以防万一有人来这里寻找使用 Zuul 的 Websockets 的解决方案:

从2.0开始,Zuul正式支持了,文档如下:
https://github.com/Netflix/zuul/wiki/Push-Messaging