问题标签 [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.

0 投票
0 回答
130 浏览

angular - 使用角度路由器时,角度组件不同步

我试图从 Angular Router 12.2.0 中找出一个奇怪的行为。

我正在使用 websockets 实时更新表格。只要我不使用路由器,一切都会按预期工作(通过单击具有[routerLink]属性的锚标记或通过调用router.navigate方法)。

重现步骤

  • 导航到托管表格的组件,比如说/employees
  • 确认表格实时更新
  • 导航离开
  • 回来/employees
  • 该表现在被页面加载时收到的数据冻结

问题不是来自套接字。该组件不断从服务器接收数据并按预期更新模型。只有 GUI 与模型不同步。

奇怪的是,如果我手动触发完全相同的更新(即通过执行绑定到按钮的功能),UI 将反映更改。

恢复实时更新的唯一方法是使用F5.

这种行为与“角区”有关吗? 为什么只有当我使用角度路由器导航时才会发生这种行为?到底是怎么回事?

代码示例

代码很简单。我只是通过提供 uri 和回调来订阅 STOMP Broker 位置。我在回调中更新模型。模型(一个简单的数组)使用*ngFor指令在视图中呈现。

在模板中:

我试过的

我当然尝试了以下方法:

  • ApplicationRef.tick()
  • NgZone.run(回调)
  • ChangeDetectorRef.detectChanges()

这些答案的解决方案都不适合我:

如何强制组件在 Angular 2 中重新渲染?

数据更新后Angular2视图没有改变

更改订阅中的变量后,Angular 6 View 未更新

输入更改值时角度组件不更新

ANGULAR 7 重新加载组件视图

在 Angular 中手动触发变更检测

在 Angular 2 版本 6 中更新 MatTableDataSource 的正确方法

没有什么能解决我的问题。每次我使用路由器时,视图都会保持冻结状态。它已经到了我正在考虑使用window.location.reload()如果没有其他方法的地步。

更新

我在评论中尝试了yehonatan yehezkelMikeOne的建议。只要我不使用路由器,它们都可以工作。一旦我开始导航,视图就不再更新。所以这证实了共同点是这里的路由器。我错过了什么?为什么路由器阻止视图更新?

更新2

致 Gergő Éles评论:

问题可能来自我为嵌套模块声明路由的方式吗?

app-routing.module

并在employee.module

0 投票
1 回答
272 浏览

angular - 选项卡关闭时关闭 Websocket 连接

我有一个带有 ng2-stompjs 和 socksjs 客户端和 Spring boot Websocket 服务器的 Angular。我想做的是在关闭当前浏览器选项卡时断开与 Websocket 的连接。

试图断开“OnDestroy”,但没有帮助

尝试订阅 connectionState 并检查连接状态枚举,但它也不起作用。

在这一点上,我陷入困境并且没有想法。如果您能提出建议,我将不胜感激!提前致谢。

0 投票
0 回答
13 浏览

javascript - 从 _generateSessionId() 获得的会话 ID 和通过解析 sockjs._transport._url 获得的会话 ID 有什么区别?

sockjs中可见的session Id有两种,一种是在此处返回的SockJs对象上直接调用_generateSessionId函数得到的
const sockJs = new SockJs('http://example.com/ws/api')

当在控制台中打印整个 sockJs 对象并解析其中的对象时,另一个会话 ID 可见,sockJs._transport._url这给了我们这样的东西

ws://example.com/ws/api/333/zf2j9qxe/websocket

根据我的阅读,zf2j9qxe实际会话 ID 与之前从函数调用返回的 ID 不同

哪一个是真实的?

0 投票
0 回答
192 浏览

node.js - StompJS:一段时间后随机重新连接循环

语境

  • 12(测试)React Native 设备通过 WebSockets 连接到我们的服务器。
  • 随机一些设备在白天停止接收任何服务器活动。
  • 这些设备将陷入重新连接循环。
    • 以下操作将使设备脱离循环:
      • 重新启动设备上的客户端应用程序。
      • 调用stompSocket.deactivate()后跟stompSocket.activate()
  • 在循环时,每次客户端尝试连接到服务器时,我们的服务器都会注册。
    • 在深入研究我们的服务器日志后,我们可以得出以下结论:
      • 客户端的CONNECT消息被服务器接收。
      • 服务器指示客户端是CONNECTED.
      • 大约 35 秒后,服务器指示客户端是DISCONNECTED
  • 服务器上以及客户端上的心跳设置为10000, 10000
  • 客户使用@stomp/stompjs@6.1.2
  • 在本期中,我将放大其中一台设备的日志。所有设备的问题日志都相似。

附件

目录

  1. StompJS 客户端配置
  2. 重连循环的客户端日志
  3. 重新启动服务器应用程序后成功重新连接的客户端日志

1. StompJS 客户端配置


2.重连循环日志(客户端)

  • 一个客户端停止从服务器接收活动,即使服务器CONNECT从客户端接收到所有消息。
  • 我无法弄清楚为什么在触发 10000 毫秒超时并且连接试图关闭之后CONNECT发送消息。

3. 重新启动服务器应用程序后成功重新连接的客户端日志

  • 这些日志显示了当服务器关闭时客户端尝试重新连接时我们应该期待什么。
  • 服务器应用程序在07:04:11和之间重新启动07:05:15
  • 预计我们的 apache 服务器503会在重新启动时返回。
  • 当服务器应用程序返回时,客户端尝试在07:05:20. 在同一秒钟内建立了连接,服务器返回了一个CONNECTED回复。
0 投票
0 回答
114 浏览

reactjs - 使用 @stomp/stompjs 反应原生 websocket connectios

我是 react native 的新手,目前,我正在研究 react native 移动应用程序 WebSocket 创建。我能够成功地在反应应用程序中成功创建 WebSocket 连接并接收到消息。但是在本机反应中,onConnect不起作用。

这是 package.json 中 stompjs 的版本

这是我在 react 和 react native 中使用的代码。

这是我在 react-native 调试器的控制台中得到的回复。

onConnect 的登录没有登录到控制台。并且无法订阅该主题。非常感谢您帮助解决此问题。

0 投票
1 回答
59 浏览

react-native - 在 React Native 中使用 @stomp/stompjs 的 Web 套接字连接

我还是 React Native 的新手,我目前正在研究需要在 React Native 应用程序中实现 websocket 连接并订阅主题以接收来自 websocket 的消息的项目。当我尝试使用@stomp/stompjs实现它时,我无法连接到 websocket,onConnect 函数不起作用。

下面是我的代码

这是我得到的输出日志

任何帮助,将不胜感激:)

0 投票
0 回答
74 浏览

javascript - 相当于服务器端代码中的 Stomp.over

是否有与 Stomp.over 等效的后端(nodejs、java 等)?我想模仿如下客户端代码:

这是为了获取下面Stomp.over返回的url,尤其是生成的sessionid:

我想用它在 k6 中进行测试,因为它需要一个 wss url:

这样做的原因是我想产生不同的 url/会话,模仿不同的用户打开他们的浏览器并连接到一个基本的 websocket url,然后使用 k6 向每个用户发送/接收数据,从而对其进行负载测试。

我曾尝试使用节点库,例如 stompjs 和 sockjs-client,但它的行为不同,生成的对象没有附加 sessionid 或类似的,两者都只在其构造函数中使用完整的 url。