这是我在使用 react-stomp 库订阅多个主题时遇到的奇怪行为。
这些是通过的主题:
0: "/topic/settings/update"
1: "/queue/9999999999/notifications"
<SockJsClient
url={apiUrl}
topics={this.props.topics}
onMessage={this.onMessage}
ref={(client) => { this.clientRef = client; }}
debug
/>
(注意我没有先通过 subscribeHeaders)
我保留了一些断点来调试react-stomp/dist/client.js
并stompjs/lib/stomp.js
查看分配给这些订阅的 id。
这(上图)是第
react-stomp/dist/client.js
一个主题的第一次调用。我们可以看到 this.props 中的 subscribeHeaders 只是一个空白对象。
这(上图)是 subscribe 函数的第一次调用,
stompjs/lib/stomp.js
我们得到空白对象作为 headers 参数。
这(上图)是第二
react-stomp/dist/client.js
个主题的第二次调用(请注意,这次我们从无处获得 subscribeHeaders)
这(上图)是第二个主题的 subscribe fn 的第二次调用
stompjs/lib/stomp.js
:(现在,我们在参数中有标题,因此我们的第二个“if”条件将是错误的,因此也为第二个主题提供相同的 id)
这整个奇怪的问题可以通过传递“subscribeHeaders={null}”来解决,然后每个主题开始获取不同的 id(即“sub-0”、“sub-1”)
<SockJsClient
url={apiUrl}
subscribeHeader={null} //only works when passed "null". Doesn't work if passed blank object "{}"
topics={this.props.topics}
onMessage={this.onMessage}
ref={(client) => { this.clientRef = client; }}
debug
/>