【发布时间】:2016-11-19 23:06:59
【问题描述】:
注意:我没有使用 Pivotal CF。
我在 CloudFoundry 上部署了一个 java 应用程序。我正在使用嵌入式 Jetty 来托管我的 Jersey REST API。默认情况下,Cloud Foundry 在端口 8080 上公开此 API。
我的应用程序还需要一些 websocket 将数据流式传输到浏览器。我为此使用 Java-WebSocket (https://github.com/TooTallNate/Java-WebSocket)。在我的本地机器上,我使用端口 8887 进行 websocket 连接。一切正常。
在 CloudFoundry 上部署后,我可以访问我的 REST API,但不能访问我的 websocket。网上搜索了一下,发现websocket连接只允许在4443端口(@987654322@)
我更改了我的服务器端以反映这一点
import org.java_websocket.server.WebSocketServer;
public class MyWebSocket extends WebSocketServer {
public MyWebSocket() throws UnknownHostException {
super(new InetSocketAddress(4443));
}
@Override
public void onOpen(org.java_websocket.WebSocket websocket, ClientHandshake handshake) {
// Handle this
}
}
在我的客户端,我正在使用以下方式连接 websocket
wss://my_cf_app.com:4443/
但我得到以下异常。
到“wss://my_cf_app.com:4443/”的 WebSocket 连接失败: 通过代理服务器建立隧道失败
我还尝试使用 CF 的“PORT”环境变量连接服务器端的 websocket,但在 Java-WebSocket 中出现“地址已在使用”错误。
我尝试了很多不同的方法,但我无法弄清楚这一点。任何帮助都会很棒。
【问题讨论】:
-
你为什么不使用嵌入式码头内置的 WebSocket 服务器支持?
-
我的 REST API 在泽西岛部署在 Jetty 上。我试图让 websocket 在 Jersey 上运行,但我失败了。这就是我搬到另一个图书馆的原因。假设我在 Jetty 上实现了 websockts,它可以在 CF 上运行吗?我的意思是 Jersey 上的 REST API 和 Jetty 上的套接字?我可以同时使用 8080 端口的 CF 服务吗?
-
是的,这就是 websocket 的重点,它只是一个升级的 HTTP 连接,使用相同的服务器、相同的连接器、相同的端口等......
标签: java embedded-jetty cloud-foundry