Подключение к API веб-сокета GDAX с помощью socket.io с веб-пакетом

Я хочу подключиться к API веб-сокета GDAX с помощью приложения в браузере, созданного с помощью реакции и веб-пакета. Я не могу использовать официальные API gdax-node или gdax-toolkit, потому что они не совместимы с webpack. Я решил попробовать подключиться к веб-сокету самостоятельно, используя socket.io, но приведенный ниже код никогда не устанавливает соединение. В приведенном ниже коде мое сообщение журнала «подписки» после подключения никогда не появляется. Как мне заставить этот код подключиться или хотя бы показать сообщение об ошибке?

const io = require('socket.io-client');

var subscribe = {
  "type": "subscribe",
  "channels": [{"name": "ticker", "product_ids": ["BTC-EUR"]}]
};

function subscribeToTimer(cb) {
  console.log('Opening socket');
  var socket = io.connect('wss://ws-feed.gdax.com');

  socket.on('connection', function(socket) {
    console.log('Subscribing');

    socket.on('disconnect', function(socket) {
      console.log('Clinet disconnected.');
    });    
  });

  //socket.on('message', timestamp => cb(null, timestamp));
  socket.on('message', data => { console.log(data); });
  socket.on('error', data => { console.log(data); });
}
export { subscribeToTimer };

person SpeculatorSeth    schedule 16.02.2018    source источник
comment
Как вы звоните subscribeToTimer? С вашим текущим примером кода мы не будем знать, как вызывается этот фрагмент кода.   -  person Mario Tacke    schedule 17.02.2018
comment
Просто что-то вроде этого. Когда я запускаю код, я вижу, что функция вызывается, потому что я вижу сообщение об открытии сокета, но не сообщения о подписке или отключении клиента. subscribeToTimer((err: Error, input: TradeMessage) =› this.addRow(input));   -  person SpeculatorSeth    schedule 17.02.2018


Ответы (2)


Socket.io не является подходящей библиотекой для этого. Я переключил его на использование глобального веб-сокета, и он отлично работает.

function subscribeToTimer(cb) {
  console.log('Opening socket');
  const socket = new WebSocket('wss://ws-feed.gdax.com');

  socket.addEventListener('message', function(event) {
    console.log('new message', event.data);
  });

  socket.addEventListener('open', function(event) {
    console.log('Subscribing');


    var subscribe = '{"type": "subscribe", "channels": [{"name": "ticker", "product_ids": ["BTC-EUR"]}]}';
    socket.send(subscribe);

    socket.addEventListener('close', function(event) {
      console.log('Client disconnected.');
    });    
  });

  //socket.addEventListener('message', timestamp => cb(null, timestamp));
}
person SpeculatorSeth    schedule 02.03.2018

Поскольку gdax выставил общедоступный URL-адрес wss, а socket.io не поддерживает соединение wss или ws, нам нужно найти обходной путь. Здесь global.websocket достаточно для подключения в браузере. Или вы также можете проверить эту библиотеку. Он просто обертывает пакет ws, и при сборке с помощью веб-пакета для использования в браузере он заменяет основной на browser.js.

person xwa130    schedule 02.03.2018