http://host/server/
)连接到应用程序。我还收到了一个演示客户端 - 一个JSPX页面,它使用Modernizr WebSockets和SockJS。演示客户端中的连接代码如下:if (Modernizr.websockets) {
socket = new WebSocket('ws://host/server/endpointx');
}
else {
socket = new SockJS('/server/endpointy');
}
stompClient = Stomp.over(socket);
stompClient.connect(headers, function(frame) { ... });
....
演示客户端运行正常(当我在浏览器中加载JSPX页面时,我可以连接到服务器)。但我的目标是使用一些Java STOMP库连接到同一台服务器。问题是,我尝试的库需要主机和端口作为连接参数:例如,使用ActiveMQ Stomp library:
StompConnection connection = new StompConnection();
connection.open("host", port);
connection.connect(new HashMap<String, String>());
如果我将
port
指定为61613
,连接会成功,但是我会直接连接到RabbitMQ而不是我的服务器(这不是我想要的)。如果我指定8080
(或80
),连接时会出现错误。
跟踪显示,这是因为java.io.EOFException at java.io.DataInputStream.readByte(Unknown Source) at org.apache.activemq.transport.stomp.StompWireFormat.unmarshal(StompWireFormat.java:137) at org.apache.activemq.transport.stomp.StompConnection.receive(StompConnection.java:77) at org.apache.activemq.transport.stomp.StompConnection.receive(StompConnection.java:68) at org.apache.activemq.transport.stomp.StompConnection.connect(StompConnection.java:139) at ....stomp.impl.activemq.ActiveMQStompDriver.connect(ActiveMQStompDriver.java:39) ... 25 more
CONNECT
帧从未收到期望的CONNECTED
帧(实际上,它没有收到任何回复)。
所以我感到困惑:我是否使用了错误的端口?或者遇到了一些库不兼容的问题?或者我需要以某种方式告诉Tomcat,我想要将HTTP连接升级为WebSockets?
如果上述问题难以回答,那么这个问题同样有用:如何使用Java连接到在Tomcat上运行的STOMP over WebSockets消息通道的Spring应用程序?