Поток веб-сокетов Tradier API node.js пример не получает никаких событий

#websocket #nodes #tradier

#веб-сокет #узлы #традиционный

Вопрос:

У меня есть следующий код nodejs для этого и этого:

 const WebSocket = require('ws');
const ws = new WebSocket('wss://ws.tradier.com/v1/markets/events');

request({
  method: 'post',
  url: 'https://api.tradier.com/v1/markets/events/session',
  form: {
    
  },
  headers: {
    'Authorization': 'Bearer MY_API_KEY_NOT_SHOWN',
    'Accept': 'application/json'
  }
}, (error, response, body) => {
    console.log(response.statusCode);
    console.log(body);
    let data = JSON.parse(body)
    let sessionId = data.stream.sessionid
    streamPrice(sessionId)
});

function streamPrice(sessionId){
  console.log(sessionId)
  ws.on('open', function open() {
    console.log('Connected, sending subscription commands...');
    ws.send(`{"symbols": ["TSLA"], "sessionid": "${sessionId}", "linebreak": true}`);
  });
  ws.on('message', function incoming(data) {
    console.log(data);
  });
  ws.on('error', function error(data) {
    console.log(data);
  });
}
  

Я получаю 200 OK ответ от запроса API на создание сеанса веб-сокетов, и у меня есть действительный идентификатор сеанса:

 200
{"stream":{"url":"https://stream.tradier.com/v1/markets/events","sessionid":"6ba4158d-8ff8-46c3-b005-***********"}}
6ba4158d-8ff8-46c3-b005-*********** 
  

Однако ws.on() события никогда не запускаются. Я не получаю никаких ошибок. Сеанс закрывается через некоторое время, предположительно из-за бездействия. Но это не бездействие со стороны моего кода…

Что-то не так в моем коде / чего-то мне не хватает, чтобы заставить это работать?

Комментарии:

1. возможно, ваш ws.on(‘open’, не запускается, потому что веб-сокет уже открыт. Возможно, будет работать запуск ws.send (непосредственно в теле функции streamPrice.

2. @user3791775 Я полностью удалил ws.on(‘open’), оставив только ws.send( на месте, и теперь поступает поток акций! Спасибо!

3. Хорошо, приятно это слышать!

Ответ №1:

Я смог самостоятельно определить проблему. Проблема в том, что я открывал веб-сокет слишком рано.

Я переместил следующую строку внутри streamingPrice области вместо глобальной области для разрешения.

 const ws = new WebSocket('wss://ws.tradier.com/v1/markets/events');