Почему все темы получают одинаковые идентификаторы, если в подписку не передается subseHeaders в SopsJsClient из библиотеки «response-stomp» - PullRequest
0 голосов
/ 20 февраля 2020

Это странное поведение, с которым я столкнулся при подписке на несколько тем с библиотекойact-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
 />

(обратите внимание, что я не сначала не пропустите subseHeaders)

Я сохранил некоторые точки останова для отладки в react-stomp/dist/client.js и stompjs/lib/stomp.js, чтобы посмотреть, какие идентификаторы назначены этим подпискам.

image This (Above image) это первый вызов в react-stomp/dist/client.js для первого topi c. мы видим, что subscribeHeaders в this.props - не что иное, как пустой объект.

image Это (над изображением) первый вызов функции подписки в stompjs/lib/stomp.js, и мы получаем пустой объект в качестве аргумента заголовков.

image (Это изображение выше) является вторым вызовом в react-stomp/dist/client.js для второго топи c ( Обратите внимание, что на этот раз мы получаем подписные заголовки из ниоткуда )

image Это (изображение выше) является вторым вызовом для подписки fn в stompjs/lib/stomp.js для второй топи c: (Теперь у нас есть заголовки в параметрах, поэтому второе условие «если» будет ложным следовательно, присвоение того же идентификатора второму топи c также )

Эту всю странную проблему можно решить, передавая «subscribeHeaders = {null}», а затем каждую топи c начинает получать разные идентификаторы (то есть "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
 />
...