问题标签 [stompjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 弹簧网络套接字 403
用例:转到 examplesite.com,然后单击一个按钮进行 websocket 连接。websocket 握手得到 403
reponse.websocket 请求:
请求头是:
在代码部分中,如果配置类似的代码
或者
这使得请求没有问题。
但我想知道为什么必须做这个额外的配置?wss://examplesite.com/* 和https://examplesite.com不被视为同源?
一件事是服务器在vip后面,例如e
java - 使用 STOMP 关闭 Websocket 连接
目前,我有一个以Websocket和Stomp作为消息传递子协议的项目,我需要管理Websocket上的断开事件和重新连接事件。如果服务器和客户端之间没有消息,我的最终目标是在 5 秒后关闭与 STOMP 的 WebSocket 会话。在服务器和客户端中设置时,我对心跳值感到非常困惑。例如,我在客户端中设置了这些心跳值(使用Stomp.js
):
这是我在服务器端(Spring Boot)上的心跳值:
所以我在服务器端设置了这个值,它会每5秒发送一条PONG消息,但是在客户端,它希望在1s内收到消息,但是当它等待超过一秒时,连接仍然在那里,WebSocket 仍在工作。
如果我改变一侧的一个值以及它如何影响另一侧?以及如何使用这些心跳值断言连接将在特定时间关闭?非常感谢。
angular - SockJS 403 错误,即使启用了 setAllowedOrigins("*")
我正在使用 spring boot angular 创建一个演示聊天应用程序。我已经使用 Spring Security 实现了 JWT 身份验证。我能够成功进行身份验证,但无法建立成功的 WebSocket 连接。它失败并出现以下错误:
这很奇怪,因为在 WebSocket 配置中我启用了允许来源。
以下是后端的配置:
- 使用 jwt 的应用程序安全配置
- 在 WEB MVC 配置中启用 CORS
- WebSocket 配置
- WebSocket 安全配置
- 负责与后端连接的 Angular 聊天服务:
- 认证后,用户重定向了聊天组件:
我已经尝试使用邮递员使用以下 URI:
- 网址:http://localhost:8090/chatal
- 方法:获取
- 授权:不记名令牌...
- 结果:欢迎使用 SockJS!
- 网址:http://localhost:8090/chatal/info?t=1617904524809
- 方法:获取
- 授权:不记名令牌...
- 结果: {"entropy":1335940544,"origins":[" : "],"cookie_needed":true,"websocket":true}
此解决方案不起作用:
该方法setAllowedOriginPatterns
不存在,如下所示:
reactjs - React stompjs 连接不会抛出错误
我想连接我的插座。当连接成功建立时,成功消息会正确打印,但当套接字连接失败时,连接不会抛出或打印任何错误。我尝试了 try and catch 方法,提供了 errorCallback 函数,但没有抛出或打印错误消息。
reactjs - react-stomp-hooks useStompClient hook 在页面刷新时设置为 undefined
我正在使用react-stomp-hooks包与我的后端建立 websocket stomp 连接。我有一个函数组件,它呈现我定义的某个页面,const stompClient = useStompClient()
在组件安装上我有一个 useEffect(),它应该在第一次渲染后直接通过 stomp 发布。现在的问题是,当我刷新页面时,我定义的 stompClient 未定义,但是在第一次渲染页面时(通过从另一个页面路由),一切正常。确切的 TypeError 是无法读取 undefined 的属性“发布”。我在这里没有看到什么?查看我的代码:
编辑1:
我认为stompClient
设置为未定义,因为必须在页面刷新时再次设置与后端的连接,并且useEffect
在此设置发生之前调用。所以我需要一种方法来触发stompClient.publish()
唯一的连接建立后,但我不知道如何实现这一点。我最重要<App/>
的组件是将所有内容包装在一个<StompSessionProvider/>
(请参阅链接的包文档)中,但是我如何才能收听这个 StompSessionProvider 的已建立连接?
reactjs - 无法在反应中读取未定义的属性“发布”
如果我对消息进行硬编码并发布该方法,则在我的 handleSubmit 方法中按预期工作。但是,如果我用输入状态替换“hello stomp”或使用任何输入提交,我会得到 Uncaught TypeError: Cannot read property 'publish' of undefined” 任何见解将不胜感激
spring-boot - STOMP over WebSockets:Spring Boot 需要 JSON;NodeJs STOMP.js 客户端无法连接
在尝试基于 WebSockets 的 STOMP 时,我注意到不同实现之间的不一致,即 Spring Boot Java 实现和使用 STOMP.js 编写的 NodeJs 客户端之间的不一致。
当调试到它时,不同的是在 Spring Boot 应用程序中,CONNECT
消息应该是一个 JSON 数组。例如,此消息由他们的测试客户端发送(使用SocksJS库以 JavaScript 编写):
相比之下,我的 NodeJs STOMP.js 测试客户端(代码如下)发送以下帧:
不幸的是,我对 STOMP 没有经验,但是在阅读了规范之后,我不明白为什么 Spring Boot 期望将数据表示为 JSON 数组。这是一个已知问题吗?
为了演示,让我分享两个示例运行。一次成功运行以连接到 RabbitMQ,然后尝试连接 Java Spring Boot 应用程序失败。(可以在最后找到带有代码的可重复设置。)
- 连接到 RabbitMQ 实例,该实例配置为使用 STOMP over WebSockets(在 上运行
ws://localhost:15674/ws
):
- 现在连接(不成功)到 Spring Boot 应用程序(
ws://localhost:5555/chat/123/k2qn3dl7/websocket
):
它失败的原因是 Jackson(JSON 解析器)未能解析该有效负载:
如前所述,在 Spring Boot 示例附带的客户端中,有效负载如下所示:
这是 Spring Boot 应用程序中的完整错误:
重现路径:
- NodeJs 客户端代码
- Spring Boot 测试应用
- RabbitMQ 测试实例
- 用 NodeJs 编写的客户端代码:
- 可以在此处找到 Spring Boot 应用程序。我在端口 5555 上启动它:
注意:如果您随后转到http://localhost:5555
,您将看到由 Spring Boot 应用程序提供的聊天应用程序。单击连接时,将建立一个 STOMP 连接。
- 要启动 RabbitMQ,您可以使用STOMP.js 中用于测试的Docker 容器:
spring-websocket - Spring Websocket 不使用@stomp/stompjs 监听取消订阅事件
我有一个 spring websocket 项目并创建了一个非常基本的页面来测试它,一切似乎都工作正常,除了 UNSUBSCRIBE 消息的侦听器。
当前端进行订阅时,我从侦听器获得第一个打印,但是当它取消订阅时,不会触发侦听器。您可以在 Chrome 的 websocket 日志中看到 UNSUBSCRIBE 消息已发送:
这是我在订阅前端的代码:
const subscription = await WebSocketService.subscribe(`/topic/myTopic`);
这是我的退订代码:
正如您从 Chrome 日志中看到的那样,正在发送 UNSUBSCRIBE 消息,但我的侦听器没有触发。有任何想法吗 ?
rabbitmq - Spring Websocket RabbitMQ中重连后的链路复用问题
我在用;
- 后端带有 Spring 集成的 RabbitMQ Websocket;(spring-boot-starter-parent:2.3.0.RELEASE,spring-cloud-dependencies:Hoxton.SR5)
- 前端的“react-stomp 5.1.0”
我安装了带有 3 个实例的 RabbitMQ 集群。
我的问题是:如果我关闭集群中的一个实例,我的 websocket 连接会被多路复用。
我搜索了这个问题,但找不到任何东西。我注意到当其中一个节点关闭时,客户端会定期请求重新连接。在我看来,这是预期的行为。但是,当连接成功执行时,我看到连接数比以前的状态增加更多。
例如 ; 一开始有20个连接。当其中一个rabbit节点掉线时,连接数首先减少(例如:12),然后客户端请求重新连接,然后连接数增加到30,比初始连接数20多。
如果存在,我错过了什么?谁能帮我?