我收到了一个Web应用程序,它使用Spring使用STOMP over WebSockets消息传递实现,类似于这里描述的内容(后端使用RabbitMQ)。它运行在Tomcat上,我可以使用常规URL(例如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库:
StompConnection connection = new StompConnection();
connection.open("host", port);
connection.connect(new HashMap<String, String>());
所以我很困惑:我是不是用错了端口?或者处理一些库不兼容?或者我需要以某种方式向Tomcat表明我想将HTTP连接升级到WebSockets吗?
如果上面的问题很难回答,那么这个问题同样有用:我如何使用STOMP over WebSockets消息传递通道连接到Spring应用html" target="_blank">程序,这些消息传递通道运行在使用Java的Tomcat上?
我找到的时候应该贴出答案的。为了实现Java客户机,连接到Tomcat,而不是直接连接到RabbitMQ,Java客户机不仅应该实现WebSockets上的STOMP,还应该实现打开握手:
打开握手旨在与基于HTTP的服务器端软件和中介体兼容,以便与该服务器对话的HTTP客户端和与该服务器对话的WebSocket客户端都可以使用单个端口。为此,WebSocket客户端的握手是HTTP升级请求
我试图使用的库只是缺少这个功能。他们试图在没有握手的情况下直接执行WebSocket连接。
taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(N); // N = number of threads
taskScheduler.afterPropertiesSet();
stompClient = new WebSocketStompClient(new StandardWebSocketClient());
stompClient.setTaskScheduler(taskScheduler);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
WebSocketHttpHeaders handshakeHeaders = new WebSocketHttpHeaders(); // you can add additional headers here for Tomcat
// Here's the main piece other libraries were missing:
// The following request will perform both, handshake and connection
// hence it gets both sets of headers (for Tomcat and for Stomp)
ListenableFuture<StompSession> future = stompClient.connect(
url,
handshakeHeaders,
new StompHeaders(),
new CustomStompSessionHandlerAdapter(this)); // called from class that also was implementing CustomStompSessionHandlerAdapter, but this could be separate class as well.
另请参见Spring参考中的WebSocket支持一节
问题内容: 我一直在玩Socket.io,node.js和WebSockets,所有这些我都可以通过wifi连接正常工作。 但是,当我通过3G连接(例如在我的iPhone上)测试支持WebSocket的应用程序时,似乎只能回退到长时间轮询了。 使用Socket.io之前,连接失败并显示“ WebSocket连接无效或未验证原点”,然后退回长时间轮询。 我不知道WebSockets是否可以在3G上工
由于SSL配置错误,队列管理器jmsdemo无法用于客户端连接。 (AMQ4199)由于SSL 配置错误,队列管理器jmsdemo无法用于客户端连接。(AMQ4199)严重程度:30(严重错误)说明:用户正试图使用安全连接连接到远程队列管理器。响应:检查目标队列管理器和本地SSL信任存储区的SSL配置。 b)以下错误信息提取为“AMQERR01”错误文件(来自服务器端) 谢谢JK
我设置了一个带有官方REPO elasticsearch docker图像的elasticsearch容器。然后运行它 轻松又有效。ps信息是 我可以使用超文本传输协议访问服务器-客户端通过端口32769- 现在我需要我的JAVA程序与dockerize elasticsearch一起工作。java Node客户端只能通过32768-连接到elasticsearch 然后我在控制台中得到以下错误:
问题内容: 我正在尝试建立与trackobot.com的连接以接收一些JSON数据。服务器仅允许通过HTTPS / SSL进行连接。这是代码: openSteam抛出javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 我通读了与类似问题有关的几篇文章,但没有任何建议可以帮助您。适当的证书在我的信任库中。例如,当我尝试连接到goo
谁能让我知道如何传递这个参数,使用java。 根据我的理解,不是证书的一部分。
当使用ojdbc6.jar或ojdbc5.jar时,从独立java应用程序连接到Oracle12c将成功。 连接字符串: 而在通过Websphere进行连接时,相同的连接字符串将失败,出现以下异常。 java.SQL.sqlexception:ORA-28040:没有匹配的身份验证协议DSRA0010E:SQL状态=99999,错误代码=28,040 注意:已尝试和