【发布时间】:2015-07-08 19:14:36
【问题描述】:
我有一个 STOMP websocket 服务器接受 localhost:8080/price-stream/ws 上的连接
我正在尝试使用 Gozirra library 进行连接,它使用 java.net.socket 进行连接,但新的 Socket() 方法只接受主机和端口参数。连接代码here。有没有办法在套接字参数中定义完整的资源位置,包括 price-stream/ws 位置?
Client c;
try {
c = new Client("localhost", 8080, "guest", "guest");
c.subscribe("topic/pricechannel1", new Listener() {
@Override
public void message(Map headers, String body) {
System.out.println(body);
}
});
c.unsubscribe("topic/pricechannel1"); // Unsubscribe all listeners
c.disconnect();
} catch (LoginException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果做不到这一点,有没有办法在服务器端转发 Spring websocket 连接请求?换句话说,我的服务器是一个运行在 tomcat 上的 Spring webapp。有没有办法可以将请求转发到我的服务器的根目录,即 localhost:8080 在这种情况下,转发到 tomcat 中的指定资源位置。我不太精通 linux 服务器配置,但我认为可以通过一些调整来实现。谢谢
【问题讨论】:
-
没有。无法在 Socket 参数中定义资源位置。资源位置是 HTTP 的一部分,而不是 TCP。为什么不使用 HTTP API?滚动自己的 HTTP 客户端代码充满危险。
-
我尝试使用 SSE,但我确实需要双向通信。价格流数据已经在浏览器中使用,所以我希望重新使用现有服务器来传输到 Swing GUI,并添加一些渠道供 Java GUI 使用。你会建议这是一个坏主意,我真的应该使用标准套接字进行 java -> java 通信吗?